c# - 尝试插入两个字母的字符时,指定的转换无效

标签 c# sql .net sql-server

所以我的代码中有这样的东西

string sqlQuery = "INSERT PERSON (FIRST_NAME, SURNAME, FIRST_CODE, SECOND_CODE) VALUES (@FIRST_NAME, @SURNAME, @FIRST_CODE, @SECOND_CODE)";

SqlCommand command = new SqlCommand(sqlQuery);
command.Parameters.AddWithValue("@FIRST_NAME", "Testo"); 
command.Parameters.AddWithValue("@SURNAME", "Tester"); 
command.Parameters.AddWithValue("@FIRST_CODE", 'A'); 
command.Parameters.AddWithValue("@SECOND_CODE", "CA"); 

在数据库中,表 PERSON 看起来像这样

[FIRST_NAME] [varchar](20) NULL,
[SURNAME] [varchar](20) NULL,
[FIRST_CODE] [char](1) NULL,
[SECOND_CODE] [char](2) NULL,

问题是,当我执行 SqlCommand 时,出现异常提示

Specified cast is not valid.

我几乎可以肯定问题出在 SECOND_CODE 字符的强制转换要求 char(2) 上。另一方面,FIRST_CODE 工作正常。那么我是否正确添加了 SECOND_CODE 参数?有什么我想念的吗?

最佳答案

问题很可能是将 char 插入到 FIRST_CODE 中,即 CHAR(1)。这是一个限制为单个字符的string类型,不是单字符类型。如果您尝试插入一个长度超过一个字符的 string,但 RDBMS 将报告数据截断错误,但它希望您提供一个 string,而不是 char

这应该有效:

command.Parameters.AddWithValue("@FIRST_CODE", "A"); 

引用table that maps SQL Server's type to types of .NET获取更多信息。

关于c# - 尝试插入两个字母的字符时,指定的转换无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35851818/

相关文章:

c# - 带有 WellKnownText 空间数据列的 SqlBulkCopy DataTable

c# - 从 Visual Studio 编辑器获取文件路径

c# - 应用程序可以在 Unity 编辑器中运行,但不能在 Android 上运行

c# - 如何打包和部署带有符号和源代码的 NuGet 包,以便调试器可以使用该源代码?

mySQL-如何使用 INNER JOIN 显示所有联系人及其状态

c# - 如何在 C# 中解析输入之前拒绝包含特定符号的输入?

C#:方法签名?

mysql - 带有 NULL 的 SQL CASE 语句

mysql - 进球时间(范围)

c# - MVC模型是Poco类,结构有数据还是业务层?