参数化的sql查询问题

时间:2014-01-14 12:38:09

标签: c# sql

我有一个csv,我将数据导入数据库。

myCommand.Parameters.Add("@cn", SqlDbType.Text);
myCommand.Parameters["@cn"].Value = comp.Rows[i][1].ToString();

如果comp.Rows[i][1]的值为X'496e626randomcharacters',我收到此错误:The floating point value '496e626' is out of the range of computer representation (8 bytes). Incorrect syntax near '496e626'.

它应该作为字符串/文本处理,所以我不明白浮点错误。 这有什么不对?

3 个答案:

答案 0 :(得分:3)

使用

 SqlDbType.VarChar

而不是

 SqlDbType.Text
  

SqlDbType.Text:字符串。可变长度的非Unicode 数据流   最大长度为2 31 -1(或2,147,483,647)个字符。

Ref

答案 1 :(得分:0)

试试这个:

myCommand.Parameters.Add("@cn", SqlDbType.VarChar).Value=comp.Rows[i][1].ToString();

答案 2 :(得分:0)

您收到的错误来自SQL Server,只要SQL尝试将字符串值转换为数值,就会发生错误。

您没有显示任何相关的SQL代码,但我假设您将此值传递给存储过程,然后将其插入到数据表中。表中的参数类型和列类型也必须是VARCHARTEXT,否则SQL将尝试进行转换。

另外,请注意与数值进行参数比较;例如,如果您尝试进行比较,例如:

WHERE @CN = 1.234

SQL会尝试将您的VARCHAR转换为浮点值。您可以使用ISNUMERIC之类的方法来避免比较失败。