【发布时间】:2023-01-11 02:11:11
【问题描述】:
我有一个小表 (tbl_user_favs),用于存储用户收藏夹。第一列是用户ID,之后的每一列是一个slot,用于存储选定的喜爱的PC,记为Slot1、Slot2。
using (SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\UserFavorites.mdf;Initial Catalog=tbl_user_favs;Integrated Security=True;Connect Timeout=30"))
{
string cmdString = ("SELECT * FROM tbl_user_favs WHERE UserID = '" + Globals.emailUID + "'");
SqlCommand cmd = new SqlCommand(cmdString, con);
cmd.Parameters.Add("@Slot1", SqlDbType.VarChar).Value = PCnum;
DataSet loginCredentials = new DataSet();
SqlDataAdapter dataAdapter;
con.Open();
//dataAdapter = new SqlDataAdapter(cmdString, con);
dataAdapter = new SqlDataAdapter(cmd);
dataAdapter.Fill(loginCredentials);
//cmd.ExecuteNonQuery();
con.Close();
}
代码执行,但它不会将 PCnum 添加到 UserID 旁边的数据库中。它应该遍历行,找到与登录用户 Globals.emailUId 匹配的 UserID,并将 PCnum 添加到一个空槽中。不用担心如何动态增加插槽,为什么这个插入不将 PCnum 添加到插槽 1?我看过一些教程使用 ExecuteNonQuery,一些使用 dataAdapter,但两者的结果相同。我怀疑我的 SQL 有问题?谢谢
【问题讨论】:
-
首先,您的
SELECT语句是一个查询,而不是一个非查询。它也很容易出现SQL injection attacks。并且参数@Slot1不是查询的一部分。最后,您的代码与 WPF 无关。