解析查询时发生错误。 [令牌行号= 1 ...]
我尝试使用stringbuilder使过程更简单,但它显示错误,我不明白问题是否与stringbuilder或代码语法。解析查询时发生错误。 [令牌行号= 1 ...]
代码:
if (dataGridView4.RowCount == 0)
{
MessageBox.Show("Attendance form is empty");
}
else
{
//string att;
int a = dataGridView4.RowCount;
string[] s = new string[a];
for (int i = 0; i < a; i++)
{
if (dataGridView4.Rows[i].Cells[1].Selected)
{
s[i] = "Present";
}
else
{
s[i] = "Absent";
}
}
string[] s1 = new string[a];
for (int i = 0; i < a; i++)
{
s1[i] = dataGridView4.Rows[i].Cells[0].Value.ToString();
}
string date = dateTimePicker1.Value.ToString("dd-MM-yyyy");
StringBuilder command = new StringBuilder();
for (int i = 0; i < a; i++)
{
command.Append("INSERT into Attendance (att_date, emp_code, is_present) values ('" + date + "','" + s1[i] + "','" + s[i] + "')");
}
SqlCeConnection conn = new SqlCeConnection(@"Data Source=C:\Users\admin\documents\visual studio 2010\Projects\WindowsFormsApplication1\WindowsFormsApplication1\hotel.sdf");
conn.Open();
SqlCeCommand cmd = new SqlCeCommand(command.ToString(),conn);
cmd.ExecuteNonQuery();
MessageBox.Show("Attendance Added");
请帮我解决这个错误,也如果您有任何建议,使上面的代码更简单,请让我知道。
在此先感谢!
您需要使用的参数,以避免SQL注入攻击,你也并不需要转换为字符串,像你这样对日期时间参数的..
using (SqlCeConnection con = new SqlCeConnection(strConn))
{
con.Open();
using (SqlCeCommand cmd = new SqlCeCommand("insert into Attendance (att_date, emp_code, is_present) values (@att_date, @emp_code, @is_present)", con))
{
cmd.Parameters.AddWithValue("@att_date", dateTimePicker1.Value);
cmd.Parameters.AddWithValue("@emp_code", emp_codeVal); //s1[i]
cmd.Parameters.AddWithValue("@is_present", is_presentVal); //s[i]
cmd.CommandType = System.Data.CommandType.Text;
cmd.ExecuteNonQuery();
}
}
如果有许多记录,然后插入尝试使用SqlCeResultSet
,您可以查看该链接上给出的MSDN示例代码。
对于每个网格行,你可以做以下
// this is only a sample you need to write for your table
SqlCeUpdatableRecord rec = rs.CreateRecord();
rec.SetInt32(0, 34);
rec.SetDecimal(1, (decimal)44.66);
rec.SetString(2, "Sample text");
rs.Insert(rec);
感谢您的帮助。我需要插入多行到数据库,我必须循环你的代码,或者有什么方法可以在你的代码中使用stringbuilder吗? – 2013-04-18 03:34:25
在你的代码中:att_date,emp_code,is_present,基于我的代码我应该使用@date,s1 [i],s [i]和dateVal,s1 [i] Val,s [i] Val对不对? – 2013-04-18 03:55:21
它应该是'dateTimePicker1.Value,s1 [i],s [i]' – Damith 2013-04-18 04:02:24
我只注意到,我使用的SQL Server Compact,我收到因为这个错误?我应该使用for循环代替stringbuilder吗? – 2013-04-18 03:27:47