SQL 服务器的 C# 插入语句出错
Error in C# insert statement for SQL Server
我正在尝试将 C# Winforms 中的插入语句传递给 SQL 服务器。我不断收到对我来说毫无意义的语法错误
error in syntax near "("
我的语法非常好,当我复制并粘贴到 SQL Server Mgmt Studio 时,代码运行完美。
如有任何帮助,我们将不胜感激!
谢谢!
try
{
using (var cmd = new SqlCommand("INSERT INTO " + intodrop.SelectedText + "(" + colnamedrop.SelectedText.ToString() + "," +
colnamedrop2.SelectedText.ToString() + ") " + "VALUES" + " (" + valuebox.Text + ");"))
{
cmd.Connection = con;
cmd.Parameters.AddWithValue("@tbl", intodrop.SelectedText);
cmd.Parameters.AddWithValue("@colname", colnamedrop.SelectedText);
cmd.Parameters.AddWithValue("@values", valuebox.Text);
cmd.Parameters.AddWithValue("@colname2", colnamedrop2.SelectedText);
con.Open();
if (cmd.ExecuteNonQuery() > 0)
{
MessageBox.Show("Record inserted");
}
else
{
MessageBox.Show("Record failed");
}
}
}
catch (Exception g)
{
MessageBox.Show("Error during insert: " + g.Message);
}
准备插入 sql 语句时,您在列名之间错过了逗号。打印时有逗号并正确显示。
没有任何输入验证的串联 sql 语句对 sql 注入攻击广泛开放。尽量使用参数。
您似乎在尝试向两列中插入值,但您是像这样 "Col1+Col2" 而不是 "Col1+','+Col2".
来追加它们
using (var cmd = new SqlCommand("INSERT INTO " + intodrop.SelectedText + "(" + colnamedrop.SelectedText.ToString() + ','+
colnamedrop2.SelectedText.ToString() + ") " + "VALUES" + " (" + valuebox.Text + ");"))
我希望这能解决问题。
检查 SelectedText 属性 returns 值是否正确。尝试改用 Text 属性。
var cmd = new SqlCommand("INSERT INTO " + intodrop.Text +
"(" + colnamedrop.Text + ',' + colnamedrop2.Text + ") "
+ "VALUES" + " (" + valuebox.Text + ");")
首先尝试对您的插入值进行硬编码,然后根据您的需要对其进行更改。确认列数据类型分配正确。
try
{
using (SqlCommand cmd = new SqlCommand("INSERT INTO Property ( FolioNo,PropertyType) VALUES (001,'WIP')"))
{
cmd.Connection = con;
con.Open();
if (cmd.ExecuteNonQuery() > 0)
{
MessageBox.Show("Record inserted");
}
else
{
MessageBox.Show("Record failed");
}
}
}
catch (Exception g)
{
MessageBox.Show("Error during insert: " + g.Message);
}
1) 你应该有两个文本框来输入你的值。如果没有列名,则将第 1 列的值变灰,第 2 列也一样。
这使您不必输入引号(不要忘记使用转义引号
2) 使用 string.format 函数提高可读性
try
{
//Add columns selected
List<string> Mycolumns = new List<string>();
If (! string.IsNullOrEmpty(colnamedrop.Text)) Mycolumns.Add(colnamedrop.Text);
If (! string.IsNullOrEmpty(colnamedrop2.Text)) Mycolumns.Add(colnamedrop2.Text);
//Add values selected with escaped quoted and string quoted
List<string> Myvalues = new List<string>();
If (! string.IsNullOrEmpty(colvalue1.Text)) Myvalues.Add("'" + colvalue1.Text.Replace("'", "''") + "'");
If (! string.IsNullOrEmpty(colvalue2.Text)) Myvalues.Add("'" + colvalue2.Text.Replace("'", "''") + "'");
//If nothing selected, no action
if (Mycolumns.Count==0 && Myvalues.Count==0) return;
//Build query
String Query = string.Format ( "INSERT INTO {0} ({1}) VALUES ({2})", intodrop.Text, string.Join(Mycolumns, ", "), string.Join(Myvalues, ", "));
//Execute query
using (var cmd = new SqlCommand(Query, con ))
{
con.Open();
if (cmd.ExecuteNonQuery() > 0)
{
MessageBox.Show("Record inserted");
}
else
{
MessageBox.Show("Record failed");
}
con.Close();
}
}
catch (Exception g)
{
MessageBox.Show("Error during insert: " + g.Message);
}
我正在尝试将 C# Winforms 中的插入语句传递给 SQL 服务器。我不断收到对我来说毫无意义的语法错误
error in syntax near "("
我的语法非常好,当我复制并粘贴到 SQL Server Mgmt Studio 时,代码运行完美。
如有任何帮助,我们将不胜感激!
谢谢!
try
{
using (var cmd = new SqlCommand("INSERT INTO " + intodrop.SelectedText + "(" + colnamedrop.SelectedText.ToString() + "," +
colnamedrop2.SelectedText.ToString() + ") " + "VALUES" + " (" + valuebox.Text + ");"))
{
cmd.Connection = con;
cmd.Parameters.AddWithValue("@tbl", intodrop.SelectedText);
cmd.Parameters.AddWithValue("@colname", colnamedrop.SelectedText);
cmd.Parameters.AddWithValue("@values", valuebox.Text);
cmd.Parameters.AddWithValue("@colname2", colnamedrop2.SelectedText);
con.Open();
if (cmd.ExecuteNonQuery() > 0)
{
MessageBox.Show("Record inserted");
}
else
{
MessageBox.Show("Record failed");
}
}
}
catch (Exception g)
{
MessageBox.Show("Error during insert: " + g.Message);
}
准备插入 sql 语句时,您在列名之间错过了逗号。打印时有逗号并正确显示。
没有任何输入验证的串联 sql 语句对 sql 注入攻击广泛开放。尽量使用参数。
您似乎在尝试向两列中插入值,但您是像这样 "Col1+Col2" 而不是 "Col1+','+Col2".
来追加它们using (var cmd = new SqlCommand("INSERT INTO " + intodrop.SelectedText + "(" + colnamedrop.SelectedText.ToString() + ','+
colnamedrop2.SelectedText.ToString() + ") " + "VALUES" + " (" + valuebox.Text + ");"))
我希望这能解决问题。
检查 SelectedText 属性 returns 值是否正确。尝试改用 Text 属性。
var cmd = new SqlCommand("INSERT INTO " + intodrop.Text +
"(" + colnamedrop.Text + ',' + colnamedrop2.Text + ") "
+ "VALUES" + " (" + valuebox.Text + ");")
首先尝试对您的插入值进行硬编码,然后根据您的需要对其进行更改。确认列数据类型分配正确。
try
{
using (SqlCommand cmd = new SqlCommand("INSERT INTO Property ( FolioNo,PropertyType) VALUES (001,'WIP')"))
{
cmd.Connection = con;
con.Open();
if (cmd.ExecuteNonQuery() > 0)
{
MessageBox.Show("Record inserted");
}
else
{
MessageBox.Show("Record failed");
}
}
}
catch (Exception g)
{
MessageBox.Show("Error during insert: " + g.Message);
}
1) 你应该有两个文本框来输入你的值。如果没有列名,则将第 1 列的值变灰,第 2 列也一样。 这使您不必输入引号(不要忘记使用转义引号
2) 使用 string.format 函数提高可读性
try
{
//Add columns selected
List<string> Mycolumns = new List<string>();
If (! string.IsNullOrEmpty(colnamedrop.Text)) Mycolumns.Add(colnamedrop.Text);
If (! string.IsNullOrEmpty(colnamedrop2.Text)) Mycolumns.Add(colnamedrop2.Text);
//Add values selected with escaped quoted and string quoted
List<string> Myvalues = new List<string>();
If (! string.IsNullOrEmpty(colvalue1.Text)) Myvalues.Add("'" + colvalue1.Text.Replace("'", "''") + "'");
If (! string.IsNullOrEmpty(colvalue2.Text)) Myvalues.Add("'" + colvalue2.Text.Replace("'", "''") + "'");
//If nothing selected, no action
if (Mycolumns.Count==0 && Myvalues.Count==0) return;
//Build query
String Query = string.Format ( "INSERT INTO {0} ({1}) VALUES ({2})", intodrop.Text, string.Join(Mycolumns, ", "), string.Join(Myvalues, ", "));
//Execute query
using (var cmd = new SqlCommand(Query, con ))
{
con.Open();
if (cmd.ExecuteNonQuery() > 0)
{
MessageBox.Show("Record inserted");
}
else
{
MessageBox.Show("Record failed");
}
con.Close();
}
}
catch (Exception g)
{
MessageBox.Show("Error during insert: " + g.Message);
}