#asp.net
#asp.net
Вопрос:
Я пытаюсь вставить запись в таблицу, но проблема в том, что в этой таблице есть 3 внешних ключа. Я буду использовать DataTable для этого, но это выдает ошибку «Нет позиции строки в 0»
Вот мой код:
try
{
using (var sqlConnection = new Helpers.SqlConnectionHelpers())
{
var connection = sqlConnection.OpenConnection();
command = new SqlCommand("CarSold_Insert", connection);
command.CommandType = CommandType.StoredProcedure;
SqlCommand commandTwo = new SqlCommand("SELECT CarForSaleId, UserId, SalesPersonId FROM CarSold WHERE Price = '" txtPrice.Text "'", connection);
DataTable table = new DataTable();
DataSet dataSet = new DataSet();
table.Load(commandTwo.ExecuteReader());
var carForSaleId = table.Rows[0]["CarForSaleId"].ToString();
var userId = table.Rows[0]["UserId"].ToString();
var salesPersonId = table.Rows[0]["SalesPersonId"].ToString();
command.Parameters.AddWithValue("CarForSaleId", carForSaleId);
command.Parameters.AddWithValue("UserId", userId);
command.Parameters.AddWithValue("SalesPersonId", salesPersonId);
command.Parameters.AddWithValue("Price", txtPrice.Text);
command.Parameters.AddWithValue("DateSold", dateSold);
command.Parameters.AddWithValue("MonthlyPaymentDate", monthlyPaymentDate);
command.Parameters.AddWithValue("MonthlyPaymentAmount", txtPaymentAmount.Text);
//connection.Open();
int k = command.ExecuteNonQuery();
command.Parameters.Clear();
if (k != 0)
{
Response.Redirect("~/AdminPanel/CarSold.aspx");
}
else
{
lblAns.Text = "Record Not Inserted into the database";
lblAns.ForeColor = System.Drawing.Color.Red;
}
}
}
catch (Exception ex)
{
lblAns.Text = ex.Message;
}
Комментарии:
1. насколько я понимаю из вашего кода, вы пытаетесь получить ту же запись, которую вы вставляете в базу данных, для этого вам следует запустить command. ExecuteNonQuery(); перед инструкцией select.
2. Нет, я не пытаюсь вставлять одинаковые записи, это просто внешний ключ, который я должен извлечь из нее.
3. @PratikshaPansara Является ли тип данных столбца цены переменным? Я заметил, что ваш запрос
SELECT CarForSaleId, UserId, SalesPersonId FROM CarSold WHERE Price ='{txtPrice.Text}'
. Убедитесь, что приведенная выше инструкция select возвращает одну или несколько строк4. Тип данных столбца цены — Float
5. Затем вам нужно исправить запрос select
SqlCommand commandTwo = new SqlCommand("SELECT CarForSaleId, UserId, SalesPersonId FROM CarSold WHERE Price = " txtPrice.Text, connection);
Ответ №1:
Поскольку столбец цены является плавающим, вам нужно написать запрос с параметром запроса, подобным этому:
SqlCommand commandTwo = new SqlCommand("SELECT CarForSaleId, UserId, SalesPersonId FROM CarSold WHERE Price = @Price", connection);
commandTwo.Parameters.AddWithValue("@Price", txtPrice.Text);
Вышеупомянутая команда вернет вам carForSaleId
, userId
salesPersonId
который вы будете использовать в команде insert
Комментарии:
1. Это не работает, потому что я извлекаю идентификатор, но хочу вставить записи.
2. Проблема в том, что ваша
commandTwo
SqlCommand не возвращает никаких данных на основе значения цены, которое вы используете в качестве критерия фильтрации. Убедитесь, что есть данные относительно значения цены, которое вы вводите вtxtPrice
текстовое поле