Я использую select query для чтения значений, а затем повторно вставляю (не обновлять) их с некоторыми обновлениями с помощью кода ниже. Я пытаюсь запустить этот запрос со вставкой и выбрать одно и то же время, но не работает, и я не принимаю никаких ошибок.C# Insert And Select in one string query
string docdetls = "Insert into DocDetls (DocStatus, DocType, DocNo,SeqNo,ItemCode,Quantity,Price,Disc,DiscAmount,VAT,ExpDate)"+
"(SELECT 2 as DocStatus, DocType, @newdocno as DocNo,SeqNo,ItemCode,Quantity,Price,Disc,DiscAmount,VAT,ExpDate FROM docdetls where [email protected] and [email protected])";
MySqlCommand cmd4 = new MySqlCommand(docdetls, con);
cmd4.Parameters.AddWithValue("stat", "1");
cmd4.Parameters.AddWithValue("newdocno", DocNoTxtBox.Text);
cmd4.Parameters.AddWithValue("DocNo",no);
con.Open();
cmd4.ExecuteNonQuery();
con.Close();
Если я запускаю тот же запрос в workbench mysql с некоторыми значениями, работает. Это возможно? Как я могу сделать эту работу?
UPDATE после ответа
string docdetls = "Insert into DocDetls (DocStatus, DocType, DocNo,SeqNo,ItemCode,Quantity,Price,Disc,DiscAmount,VAT,ExpDate)"+
"(SELECT 2 as DocStatus, DocType, @newdocno as DocNo,SeqNo,ItemCode,Quantity,Price,Disc,DiscAmount,VAT,ExpDate FROM docdetls where [email protected] and [email protected])";
MySqlCommand cmd4 = new MySqlCommand(docdetls, con);
cmd4.Parameters.AddWithValue("stat", "1");
//cmd4.Parameters.AddWithValue("newdocno", DocNoTxtBox.Text);
cmd4.Parameters.AddWithValue("DocNo",no);
cmd4.Parameters.Add("@newdocno", MySqlDbType.Int16).Value = DocNoTxtBox.Text;
con.Open();
cmd4.ExecuteNonQuery();
con.Close();
еще не работает ..
А как насчет @newdocno? Мне это нужно. Есть ли способ? – marios
Является единственным вариантом белого списка? Можете ли вы показать мне пример с моим кодом, как сделать белый список? – marios
@marios Я упомянул об этом в своем ответе. Вы пытаетесь параметризовать имя столбца, которое не разрешено. Вы должны использовать конкатенацию строк для своего столбца, но прежде чем вы это сделаете, вам нужно использовать _really_ strong validation перед тем, как поместить его в свой sql или создать белый список, который включает в себя действительные имена столбцов. –