#c# #tsql #sql-server-2008-r2
#c# #tsql #sql-server-2008-r2
Вопрос:
Я создаю приложение, которое считывает csv-файл в представление таблицы данных на C #. Файл состоит из таких данных, как номер товара и запас.
Если номер элемента тот же, то следует добавить его запас, а затем заменить существующий запас в базе данных тем же номером элемента.
Я могу добавить запас из csv-файла в базу данных с теми же номерами элементов в базе данных, но я не могу заменить запас.
Вот мой код:
string sql_select = "select count(*) from PRODUCTS where item_no= '"
itemNo "'";
SqlCommand cmdCheckPmk = new SqlCommand(sql_select, Class1.conn);
int selectItemNo = Convert.ToInt32(cmdCheckPmk.ExecuteScalar());
if (selectItemNo != 0)
{
string sql_update = "update PRODUCTS set item_stock= '" Stock
"' where item_no= '" itemNo "'";
SqlCommand cmd1 = new SqlCommand(sql_update, Class1.conn);
}
else
{
SqlCommand cmd11 = new SqlCommand("insert into PRODUCTS(item_no,item_name,price,cost,item_stock,dept_id,tax_rate1,tax_rate2,bulk_price,bulk_qty) values ('" itemNo "','" itemName "'," price "," cost "," Stock ",'" dept "','" tax1 "','" tax2 "'," BulkPrize "," BulkQty ") ", Class1.conn);
cmd11.ExecuteNonQuery();
}
Я использую SQL server 2008 R2.
Комментарии:
1. строка sql_select = «выбрать количество (*) из ПРОДУКТОВ, где item_no= ‘» ItemNo «‘»; SqlCommand cmdCheckPmk = новая SqlCommand(sql_select, Class1.conn); int selectItemNo = Преобразовать. ToInt32(cmdCheckPmk. ExecuteScalar()); if (selectItemNo != 0) { строка sql_update = «обновить набор продуктов item_stock= ‘» Stock «‘ где item_no= ‘» ItemNo «‘»; SqlCommand cmd1 = новая SqlCommand(sql_update, Class1.conn); cmd1. ExecuteNonQuery(); }
2. К вашему сведению, не существует такого понятия, как «C#.NET «. Язык называется «C #».
3. @John: Хорошо, я понимаю, что вы пытаетесь сказать, но можете ли вы решить мою проблему на C #.
Ответ №1:
В вашем примере выше было много маленьких проблем.
Изучите приведенный ниже базовый пример в качестве лучшего подхода.
// Pass in your SQL Connection object so you do not have to worry about
// multiple open connections
public int jp2Test(SqlConnection conn) {
// Verify someone did not pass in a NULL object
if (conn != null) {
string sql_text = "select count(*) from PRODUCTS where item_no=@item_no";
using (SqlCommand cmd = new SqlCommand(sql_text, conn)) {
// Get in the habit of using Parameters. If you know the SqlDbType, use one of
// the Parameter overloads that provides for this.
cmd.Parameters.AddWithValue("@item_no", itemNo);
// Open the connection if it is not already
if ((cmd.Connection.State amp; ConnectionState.Open) != ConnectionState.Open) {
cmd.Connection.Open();
}
// initialize an item_number variable
int selectedItemNo = -1;
object value = cmd.ExecuteScalar();
// Check for both NULL and DBNull
if ((value != null) amp;amp; (value != DBNull.Value)) {
selectedItemNo = Convert.ToInt32(value);
}
// Update your SQL Text based on the value you received.
if (0 < selectedItemNo) {
sql_text = "update PRODUCTS set item_stock=@item_stock where item_no=@item_no";
// this value is already included
// cmd.Parameters.AddWithValue("@item_no", itemNo);
// this is a common value that will be added after the conditional
// cmd.Parameters.AddWithValue("@item_stock", Stock);
} else {
sql_text = "insert into PRODUCTS"
" (item_no, item_name, price, cost, item_stock, dept_id, tax_rate1, tax_rate2, bulk_price, bulk_qty)"
" values "
"(@item_no,@item_name,@price,@cost,@item_stock,@dept_id,@tax_rate1,@tax_rate2,@bulk_price,@bulk_qty)";
// this value is already included
// cmd.Parameters.AddWithValue("@item_no", itemNo);
cmd.Parameters.AddWithValue("@item_name", itemName);
cmd.Parameters.AddWithValue("@price", price);
cmd.Parameters.AddWithValue("@cost", cost);
// this is a common value that will be added after the conditional
// cmd.Parameters.AddWithValue("@item_stock", Stock);
cmd.Parameters.AddWithValue("@dept_id", dept);
cmd.Parameters.AddWithValue("@tax_rate1", tax1);
cmd.Parameters.AddWithValue("@tax_rate2", tax2);
cmd.Parameters.AddWithValue("@bulk_price", BulkPrize);
cmd.Parameters.AddWithValue("@bulk_qty", BulkQty);
}
cmd.CommandText = sql_text;
cmd.Parameters.AddWithValue("@item_stock", Stock);
// Return the number of SQL records that were affected.
return cmd.ExecuteNonQuery();
}
}
// return -1 on Error
return -1;
}
Комментарии:
1. @jp@code: можете ли вы сообщить мне, добавит ли эта программа запас и заменит ли запас в базе данных его конечным значением.
2. @Rushabh: Приведенный выше пример, как показывает код, вставит или обновит запас любыми новыми значениями, которые вы указали.
3. Я попробовал приведенный выше пример, но он не добавляет запас и не заменяет существующее значение в базе данных. Он просто принимает 2-е значение из запаса с тем же item_no и заменяет его базой данных, он не добавляет.
4. Предположим, что в базе данных ItemNo = 111 имеется запас 10, а файл состоит из данных типа ItemNo = 111 и запаса 10 и 5. В программе должен быть добавлен запас, скажем, 15, а затем замените его на 10.
5. Теперь я в замешательстве. Код в вашем вопросе проверяет, существует ли запись в базе данных. Если оно существует, оно обновляет базу данных; если нет, оно вставляет данные. Комментарий выше полностью оставляет эту линию вопросов. Не могли бы вы объяснить это немного лучше? Возможно, даже отредактируйте свой вопрос, чтобы отобразить то, что вам действительно нужно.