2

我正在尝试修复代码中的单引号错误:

std::string Index;

connection->Open();
String^ sTableName = gcnew String(TableName.c_str());
String^ insertstring = String::Format("INSERT INTO {0} (idx, rec, date) VALUES (@idx,    @rec, getdate())", sTableName);
SqlCommand^ command = gcnew SqlCommand(insertstring, connection);
String^ idx = gcnew String(Index.c_str());
command->Parameters->Add("@idx", SqlDbType::VarChar)->Value = idx;

错误是如果 idx="that's",SQL 会失败,说明存在语法错误。显然,问题出在报价单上。但是一些谷歌搜索表明使用参数是使用引号的方法。如果类型是 TEXT 而不是 VARCHAR,则 SqlParameter 运行良好。

除了手动将字符串中的引号符号数量加倍之外,还有其他解决方案吗?

更新:我尝试在 SQL Management Studio 中手动编辑此字段,但它不允许在 VARCHAR 字段中使用单引号。这在 SQL 中正常吗?

4

4 回答 4

2

我怀疑问题是在您的表名中引用了引号,或者 idx 听起来更像是数字类型的名称而不是字符类型的名称。


根据您的更新,我建议您检查管理工作室中表格的额外限制。

于 2009-05-19T11:44:09.030 回答
1

老实说,我从来没有遇到过 SqlParameters 的问题。但请尝试以下操作:

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparametercollection.addwithvalue.aspx

command->Parameters->AddWithValue("@idx", idx);

这应该为您工作并正确编码。

于 2009-05-19T10:41:03.777 回答
0

如果你确定它是一个报价问题,那么,

C#代码:

idx = idx.Replace("'", "''"); 

将解决问题。

于 2009-05-19T10:36:48.183 回答
0

对不起。

问题出在 SQL 触发器的代码中。删除它们后,一切正常。

于 2009-05-19T12:50:48.740 回答