【问题标题】:Input string is not in correct format [closed]输入字符串的格式不正确[关闭]
【发布时间】:2013-11-25 19:54:37
【问题描述】:
string CommandText = "insert into dbo.printing_list(batch_code,bill_no,date,sr_no,gross_wt,core_wt,nett_wt,c_id,category) values('" + 
                      comboBox2.Text.ToString() + 
                      "','" + textBox1.Text.ToString() + "','" + 
                      dateTimePicker1.Value + "','" +
                      dataGridView1.Rows[i].Cells[1].Value + "','" +
                      Convert.ToDecimal(dataGridView1.Rows[i].Cells[2].Value) + 
                      "','" + Convert.ToDecimal(label2.Text.ToString()) + "','" + 
                      dataGridView1.Rows[i].Cells[3].Value + "','" + g + "','" +
                      comboBox1.Text.ToString() + "')";

【问题讨论】:

  • 问题是什么?
  • 请尝试search,您不是第一个遇到此错误的人。 :)
  • @CodeCaster: 2742 次点击 :-) 绝对 不是第一个.....
  • SQL Injection alert - 您应该将您的 SQL 语句连接在一起 - 使用 参数化查询 来避免 SQL 注入
  • 欢迎来到 Stackoverflow。首先,您应该阅读FAQHow to Ask 几次。其次,您应该始终使用parameterized queries。这种字符串连接对 SQL 注入 攻击开放。

标签: c# .net


【解决方案1】:

您必须使用参数化查询而不是字符串连接。

用这个修改你的 c# 代码:

string connString = "Your connection string here";
using(SqlConnection cn = new SqlConnection(connString))
{
  cn.Open();
  string query = "insert into dbo.printing_list(batch_code,bill_no,date,sr_no,gross_wt,core_wt,nett_wt,c_id,category) values(@batch_code,@bill_no,@date ,@sr_no,@gross_wt,@core_wt,@nett_wt,@c_id,@category)";

  SqlCommand cmd = new SqlCommand(query , cn);
  cmd.Parameters.Add(new SqlParameter(@batch_code , cast_value_retrieved_from_your_control));
  cmd.Parameters.Add(new SqlParameter(@bill_no , cast_value_retrieved_from_your_control));
  cmd.Parameters.Add(new SqlParameter(@date , cast_value_retrieved_from_your_control));
  cmd.Parameters.Add(new SqlParameter(@sr_no , cast_value_retrieved_from_your_control));
  cmd.Parameters.Add(new SqlParameter(@gross_wt , cast_value_retrieved_from_your_control));
  cmd.Parameters.Add(new SqlParameter(@core_wt , cast_value_retrieved_from_your_control));
  cmd.Parameters.Add(new SqlParameter(@nett_wt , cast_value_retrieved_from_your_control));
  cmd.Parameters.Add(new SqlParameter(@c_id , cast_value_retrieved_from_your_control));
  cmd.Parameters.Add(new SqlParameter(@category , cast_value_retrieved_from_your_control));
  int retval = cmd.ExecuteNonQuery();
  if(retval > 0)
  {
      //A Label you can keep your page for showing message - named as "Label1"
       Label1.Text = "Inserted Successfully";
  }
}

【讨论】:

  • 只是给读者的一个建议:最好在传递数据类型的同时也放置数据类型 ex:SqlDBType.int for type integer
猜你喜欢
  • 1970-01-01
  • 2014-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
相关资源
最近更新 更多