gpt4 book ai didi

c# - SQL 插入语句语法

转载 作者:太空狗 更新时间:2023-10-29 22:04:11 26 4
gpt4 key购买 nike

基本上我所做的是,单击按钮后,程序将根据用户的选择从特定行中提取数据,并使用 INSERT 将其放置在不同的表中。以下是代码。

private void button3_Click(object sender, EventArgs e)
{
const String connectionString = "Data Source = Vanessa-PC\\SQLEXPRESS; Initial Catalog = IUMDC; Connect Timeout = 15; Integrated Security = true";
SqlConnection con = new SqlConnection(connectionString);

//int SituationID1;
label24.Show();

foreach (SitID x in Sittbl)
{
if (x.ID == Convert.ToInt16(comboBox1.SelectedItem))
{
try
{
con.Open();
SqlCommand command = new SqlCommand("SELECT * FROM Situation WHERE SituationID=" + x.SitIDs, con);
SqlDataReader dr = command.ExecuteReader();

while (dr.Read())
{
sitid1 = Convert.ToInt32(dr[0]);
name1 = dr[4].ToString();
incident1 = Convert.ToDateTime(dr[1]);
charges1 = dr[5].ToString();
nature1 = dr[2].ToString();
}

con.Close();
}
catch (SqlException ex)
{
MessageBox.Show("Database failed to connect" + ex.Message);
}

//SituationID = x.SitIDs;
}
}

try
{
con.Open();
SqlCommand command1 = new SqlCommand("INSERT INTO CurrentSit VALUES (" + sitid1 + ",'" + incident1.ToString("YYYY-mm-DD") + "', '" + nature1 + "', '" + name1 + "', '" + charges1 + "'", con);
SqlDataReader dr1 = command1.ExecuteReader();
con.Close();
}
catch (SqlException ex)
{
MessageBox.Show("Database failed to connect" + ex.Message);
}
//Situation Sit = new Situation();
//Sit.ShowDialog();
}

我的代码失败并显示

"Incorrect syntax near row item"

两个表的类型是一样的,我已经测试过了!

最佳答案

看起来你最后的sql语句不正确。也许原因是在你的 sql stament 中使用了撇号,但你不应该关心它。我在回答的中间解释了为什么你不应该关心。

SqlCommand command1 = new SqlCommand("INSERT INTO CurrentSit VALUES (" + sitid1 + ",'" + incident1.ToString("YYYY-mm-DD") + "', '" + nature1 + "', '" + name1 + "', '" + charges1 + "'", con);

要查明究竟是什么问题,您可以改为指定列名。但我建议您使用参数化查询,甚至不必指定您的列名。

SqlCommand command1 = new SqlCommand("INSERT INTO CurrentSit VALUES(@sitid1, @incident1, @nature1, @name1, @charges1)", con);

command1.Parameters.AddWithValue("@sitid1", sitid1);
command1.Parameters.AddWithValue("@incident1", incident1.ToString("YYYY-mm-DD"));
command1.Parameters.AddWithValue("@nature1", nature1);
command1.Parameters.AddWithValue("@name1", name1);
command1.Parameters.AddWithValue("@charges1", charges1);

command1.ExecuteNonQuery();

您应该始终使用 parameterized queries 。此类代码对开放SQL Injection 攻击。

还有马克 mentioned , 没有意义使用 ExecuteReader()对于这条sql语句,因为它只是INSERT数据,不返回任何数据。因此,您只需要使用 ExecuteNonQuery()在这种情况下。

关于c# - SQL 插入语句语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17127187/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com