我面临着SQL Server本地数据库的问题,一切都可以使用insert into命令,但是当我想为从dataGridView存储的一些数据创建一个新表时,它会创建一个新表但是我无法插入到表中数据,它说语法错误,但我一直在程序的其他部分使用此代码,它工作正常,为什么它在这里不起作用?
string T_Name = tempId;
int suma;
string check_t = "IF NOT EXISTS (SELECT * FROM sys.sysobjects WHERE NAME = N'" + T_Name + "' AND xtype=N'U') CREATE TABLE [dbo].[" + T_Name + "](" + "[Drink] [varchar](50) NOT NULL," + "[Price] [INT] NOT NULL," + "[Amount] [INT] NOT NULL," + "[Total] [Int] NOT NULL," + ")";
sql_cn.Open();
try
{
SqlCommand ext = new SqlCommand(check_t,sql_cn);
ext.ExecuteNonQuery();
foreach (DataGridViewRow rw in dataGridView1.Rows)
{
suma = Convert.ToInt16(rw.Cells[1].Value) * Convert.ToInt16(rw.Cells[2].Value);
SqlCommand cmd1 = new SqlCommand("INSERT INTO " + T_Name + " (Drink,Price,Amount,Total) (@Drink,@Price,@Amount,@Total)", sql_cn);
cmd1.Parameters.Add("@Drink", SqlDbType.VarChar).Value = Convert.ToString(rw.Cells[0].Value);
cmd1.Parameters.Add("@Price", SqlDbType.VarChar).Value = Convert.ToInt16(rw.Cells[1].Value);
cmd1.Parameters.Add("@Amount", SqlDbType.VarChar).Value = Convert.ToInt16(rw.Cells[2].Value);
cmd1.Parameters.Add("@Total", SqlDbType.VarChar).Value = (Convert.ToInt16(rw.Cells[2].Value) * Convert.ToInt16(rw.Cells[1].Value));
cmd1.ExecuteNonQuery();
}
MessageBox.Show("Data Stored", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch(Exception err)
{
MessageBox.Show(err.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
sql_cn.Close();
}
我也试过使用不同的插入代码,如:
INSERT INTO "+T_Name+" VALUES('"+Convert.ToString(rw.Cells[0].Value)+"','"+Convert.ToInt16(rw.Cells[1].Value)+"','"+Convert.ToInt16(rw.Cells[2].Value)+"','"+total+"')
答案 0 :(得分:2)
听起来有两个问题。
它不喜欢表名(我不认为它们可以从数字开始,但我想它们可以因为那部分似乎对你很好),所以用方括号括起来。
此外,您在列名和参数之间缺少VALUES
关键字。
SqlCommand cmd1 = new SqlCommand(
"INSERT INTO [" + T_Name + "] (Drink,Price,Amount,Total) VALUES (@Drink,@Price,@Amount,@Total)",
sql_cn);