如何在 .NET C# 中使用编写 N 进行插入查询?

Posted

技术标签:

【中文标题】如何在 .NET C# 中使用编写 N 进行插入查询?【英文标题】:How to use writing N for insert query in .NET C#? 【发布时间】:2021-11-13 15:39:07 【问题描述】:

在 SQL Server 中

update incident_info 
set description = N'ဆေးလိပ်' 
where incidentid = 5

此查询在 SQL Server 中是正确的,并且在数据库中正确显示缅甸字体。

我想在下面的插入查询中编写正确的查询。

sqlUtil.SqlDataUpdate(false, ("INSERT INTO Incident_Info (incidentid, incidentdate, incidenttime, description, Salesmen_id, name, phone, email, address, cost, currency, solution, status)" +
            "VALUES (@incidentid, @incidentdate, @incidenttime, N'+@description+', @salesmenid, N'+@name+', @phone, @email, N'+@address+', @cost, @currency, N'+@solution+', @status)"), SysController.dicParams);

【问题讨论】:

您只需将参数定义SqlDbType.NVarChar - 参数名称前不需要N.....。 sqlCmd.Parameters.Add("@description", SqlDbType.NVarChar, 100).Value = "......" - .NET 中的字符串默认已经是 Unicode 字符串 【参考方案1】:

不需要需要在您的 SQL 参数名称前加上 N 前缀 - 这是无用的,并且可能会导致错误。在原始 SQL 代码 sn-p 中指定 Unicode 字符串文字 时,需要 N 前缀。

在您的情况下,您需要确保实际插入 SQL Server 的代码将您的参数正确定义为SqlDbType.NVarChar。因此,在您的 sqlUtil 类中,某处有一个方法 SqlDataUpdate 可以解析并执行您发送的 SQL 语句。

在里面,你必须确保使用类似这样的代码:

using (SqlConnection conn = new SqlConnection(-your-connection-string-here-))
using (SqlCommand insertCmd = new SqlCommand(sqlQuery, conn))

    // here, you need to ensure you define your string parameters correctly
    insertCmd.Parameters.Add("@description", SqlDbType.NVarChar, 100);
    .....
    
    // and then you need to set the values - since .NET strings are inherently Unicode, no special treatment is needed
    insertCmd.Parameters["@description"].Value = SysController.dicParams.......
    .....
    
    // open, execute, close
    conn.Open();
    int rowsInserted = insertCmd.ExecuteNonQuery();
    conn.Close();

这必须在您的sqlUtil内部完成 - 您不能通过简单地在参数名称中添加N 前缀来从“外部”影响这一点。 ..

【讨论】:

漂亮而简短的insertCmd.Parameters.Add("@description", SqlDbType.NVarChar, 100).Value = SysController.dicParams; 两行合二为一。而conn.Close(8); 是一个错字

以上是关于如何在 .NET C# 中使用编写 N 进行插入查询?的主要内容,如果未能解决你的问题,请参考以下文章

使用C#的DAPPER 进行增删改查操作(准备工作)

使用C#书写SQLite数据库增删改查语句(以及插入byte[]时遇到的问题总结)

在C#中进行DataTable操作:根据列数据插入一些汇总行

如何在 .Net 5.0 C# 或 F# 中编写以特定时间间隔定期运行的代码

c#编写的代码用:linq和传统的ado.net哪个好,出错少,哪个更快,对服务器的负担最小

什么是相当于在 c# .net 中插入和编辑记录的 dao?