2013-10-03 2 views
2

Я создаю приложение в WPF, используя C#, где пользователи заполняют datagrid, и информация затем сохраняется в DataTable под названием smb1. Следующий код работает для вставки данных в базу данных SQL, но при изменении кода для его обновления не работает. Кто-нибудь знает, как я могу изменить свой код, чтобы позволить Updates, поскольку нет ошибок, возникающих при запуске моего приложения в Visual Studio. Я должен добавить, что столбец «Оборудование» не может быть отредактирован в datagrid, поэтому возвращаемые данные совпадают с данными, взятыми из базы данных, так что обновленные строки будут сопоставляться со строками оборудования в базе данных SQL с использованием предложения WHERE. Ниже приведен исходный код вставки плюс моя попытка обновления базы данных.Обновление таблицы SQL с содержимым datatable

Вставить код

SqlConnection con = new SqlConnection(MyConnectionString); 
string SqlCmdText = "Insert into SHIFTLOG Values(@EQUIPMENT,@BATCHNO,@PRODUCTNO,@STATUS,@DATE,@PERIOD,@MACHINE)"; 
SqlCommand sc = new SqlCommand(SqlCmdText, con); 
con.Open(); 
foreach (DataRow row in smb1.Rows) 
{ 
    sc.Parameters.Clear(); 
    sc.Parameters.AddWithValue("@EQUIPMENT", row["EQUIPMENT"]); 
    sc.Parameters.AddWithValue("@BATCHNO", row["BATCHNO"]); 
    sc.Parameters.AddWithValue("@PRODUCTNO", row["PRODUCTNO"]); 
    sc.Parameters.AddWithValue("@STATUS", row["STATUS"]); 
    sc.Parameters.AddWithValue("@DATE", DateTime.Now.ToString("yyyy-MM-dd")); 
    sc.Parameters.AddWithValue("@PERIOD", DateTime.Now.ToString("tt")); 
    sc.Parameters.AddWithValue("@MACHINE", "SMB1"); 

    sc.ExecuteNonQuery(); 
} 
con.Close(); 

Покушение для кода Обновление

SqlConnection con = new SqlConnection(MyConnectionString); 
string SqlCmdText = "UPDATE SHIFTLOG SET EQUIPMENT='@EQUIPMENT',BATCHNO='@BATCHNO',PRODUCTNO='@PRODUCTNO',STATUS='@STATUS',DATE='2013-09-12',PERIOD='@PERIOD',MACHINE='@MACHINE' WHERE EQUIPMENT='@EQUIPMENT'"; 
SqlCommand sc = new SqlCommand(SqlCmdText, con); 
con.Open(); 
foreach (DataRow row in smb1.Rows) 
{ 
    sc.Parameters.Clear(); 
    sc.Parameters.AddWithValue("@EQUIPMENT", row["EQUIPMENT"]); 
    sc.Parameters.AddWithValue("@BATCHNO", row["BATCHNO"]); 
    sc.Parameters.AddWithValue("@PRODUCTNO", row["PRODUCTNO"]); 
    sc.Parameters.AddWithValue("@STATUS", row["STATUS"]);     
    sc.Parameters.AddWithValue("@PERIOD", DateTime.Now.ToString("tt")); 
    sc.Parameters.AddWithValue("@MACHINE", row["MACHINE"]); 

    sc.ExecuteNonQuery(); 
} 
con.Close(); 

Спасибо за любую помощь.

ответ

5

Удалите одинарные кавычки вокруг параметров.

string SqlCmdText = "UPDATE SHIFTLOG SET [email protected],[email protected],[email protected],[email protected],DATE='2013-09-12',[email protected],[email protected] WHERE [email protected]"; 

Кроме того, я думаю, что раздел обновления для [email protected] является излишним, так как, где положение не будет правильным, если он изменился. Таким образом, вы могли бы использовать

string SqlCmdText = "UPDATE SHIFTLOG SET [email protected],[email protected],[email protected],DATE='2013-09-12',[email protected],[email protected] WHERE [email protected]"; 
+0

@ astander & Damith.I не могу поверить, что я никогда не заметил, что при сравнении 2 примера! Большое спасибо за помощь ребятам! –

3

удалить '' во всех параметров в вашем SQL Statement

"UPDATE SHIFTLOG SET [email protected],....... WHERE [email protected] 

, если вы используете кавычки все ваши параметры принимают в виде строковых значений, а не в качестве параметров SQL

И также вам необходимо использовать столбцы с [], например , если они указаны reserved keywords

Смежные вопросы