2

我正在开发一个必须支持多种语言的应用程序。为了解决特殊字符问题,我将 NVarhcar 用于我的文本字段。所以我对文本字段的 SQL 查询是

insert into tbl_text(text)values(N'Chci tančit v oblasti')

我的问题是将它放在 SqlCommand 中,即"insert into tbl_text(text)values(N@text)". 当然,它保存"N@text"在数据库表中。

你们知道有什么办法吗?我正在使用 C# 和 SQL 2008。

对不起,如果很难理解我的问题。我的英语很差=/

4

5 回答 5

4

由于这个原因,Add(string, object)已被弃用(来自 SQL Server 团队的 Pablo Castro):

问题是 C# 和 VB.NET 编译器都会为这段代码暴露出非常奇怪的行为:

command.Parameters.Add(“@p”, 0);

您可能希望这使用接受对象的重载并将值 0 分配给它,但它会选择接受 SqlDbType 作为第二个参数的重载!为了避免 Add(string, sqldbtype) 和 Add(string, object) 之间的这种(以及可能的其他)歧义,我们弃用了 Add(string, object) 并引入了 AddWithValue(string, object)。一般来说,有多个重载,其中一个区别参数类型是“对象”是一件危险的事情。

于 2011-01-19T01:37:34.673 回答
2

您应该使用允许您明确指定数据类型的SqlParameters参数化您的插入。(它还让您不必担心查询导致的 SQL Server 注入攻击)。

例子:

SqlCommand cmd  = new SqlCommand("insert into tbl_text (text) values(@MYTEXT)", myConnection);
cmd.Parameters.Add(new SqlParameter("@MYTEXT", SqlDbType.NVarChar)).Value = "Chci tančit v";
cmd.ExecuteNonQuery();
于 2011-01-18T23:25:37.573 回答
1

参数名前不要加“N”,仅在使用字符串常量时使用,表示它是一个unicode字符串。所以你的查询应该是:

insert into tbl_text(text) values (@text)
于 2011-01-18T23:28:10.017 回答
0

使用SQLParameters

这是一个简单的例子:

var cmd = _dbCon.CreateCommand();
cmd.CommandText =
    "insert into tbl_text (textfield) values(@textfield)";
cmd.Parameters.Add(new SQLParameter("@textfield", "Chci tančit v oblasti"));
cmd.ExecuteScalar();
于 2011-01-18T23:26:24.290 回答
0

这是简单的例子

String filePath = @"D:\" + FileName;
SqlCommand command = new SqlCommand();
command.Connection = connection;
command.CommandText = 
    @"DECLARE @TraceId INT = (SELECT MAX(id) FROM sys.traces WITH (NOLOCK))
    SET @TraceId=@TraceId+1

    DECLARE @File NVARCHAR(256);
    Set @File= (@filePath)

    SET @TraceId=@TraceId+1 --Var olandan bir fazla

    DECLARE @MaxFileSize BIGINT = 1 /* max size of file as MegaByte*/
    DECLARE @FileCount INT = 1024 /* max file count for write*/

    exec sp_trace_create @traceid = @TraceId OUTPUT,
                                    @options = 2,
                                    @tracefile = @File,
                                    @maxfilesize = @MaxFileSize, 
                                    @stoptime = NULL,
                                    @filecount = @FileCount

    SELECT @TraceId";

command.Parameters.Add(new SqlParameter("@filePath", SqlDbType.NVarChar)).Value = filePath;
于 2016-10-14T07:35:10.603 回答