我正在C#上创建一个窗体,该窗体将数据插入带有where子句的表中,但是不起作用。我认为查询的语法是问题,但我无法解决。
这是我尝试过的一种,但是我需要一个带有where子句的插入查询。
In []:
max(data, key=lambda d: data[d]['Distance'])
Out[]:
'key1'
我在下面尝试了此代码:
SqlCommand addEmp = new SqlCommand("INSERT INTO tbl_Expenses " +
"(InvestedMoney,EstimatedServingCount,MealName) " +
"VALUES (@inv, @est, @mname)", conn);
addEmp.Parameters.AddWithValue("@mname", textBox1.Text);
addEmp.Parameters.AddWithValue("@inv", textBox2.Text);
addEmp.Parameters.AddWithValue("@est", textBox3.Text);
conn.Open();
addEmp.ExecuteNonQuery();
conn.Close();
但是我得到这个错误:
System.Data.SqlClient.SqlException:“ =”附近的语法不正确
答案 0 :(得分:4)
本节在行之间缺少空格:
"from tbl_Expenses" +
"WHERE MealName = '"
因此sql代码引用了一个名为tbl_ExpensesWHERE
的表,为该表指定了别名MealName
,然后有一个不适当的=
。
但是您还应该已经从其他地方的参数使用中知道,可以将textBox1.Text
替换为这样的查询 NOT 。 从不这样做。 甚至没有一次。甚至没有练习/学习代码!
这里还有其他一些不良做法,但这是最糟糕的。这是一个更好的模式:
string sql = @"
INSERT into tbl_Meal
(ExpensesID,MealName,MealPrice,ImageName,Imageblob)
SELECT
ExpensesID,@mname,@mprice,@mname,@img
FROM tbl_Expenses
WHERE MealName = @mname";
using (var conn = new SqlConnection("connection string here"))
using (var cmd = new SqlCommand(sql, conn))
{
//wild guess at column types. Use actual column types/size FROM THE DATABASE
cmd.Parameters.Add("@mname", SqlDbType.NVarChar, 30).Value = textBox1.Text;
cmd.Parameters.Add("@mprice", SQlDbType.Decimal, 18, 8).Value = textBox4.Text;
//use the size of the column here, not the length of the photo
cmd.Parameters.Add("@img", SqlDbType.Image, 8000).Value = photo;
conn.Open();
cmd.ExecuteNonQuery();
}
答案 1 :(得分:0)
代替Parameters.AddWithValue()
使用Parameters.Add()
并使用正确的数据类型,例如EstimatedServingCount
似乎是一个整数,但是AddWithValue
不知道:
addEmp.Parameters.Add("@mname", SqlDbType.VarChar).Value = textBox1.Text;
addEmp.Parameters.Add("@inv", SqlDbType.VarChar).Value = textBox2.Text;
addEmp.Parameters.Add("@est", SqlDbType.Int).Value = textBox3.Text;