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"確かに、DBテーブルに保存されます。

どういうわけかそれをすることを知っていますか?私はC#とSQL2008を使用しています。

私の質問を理解するのが難しかったらごめんなさい。私の英語は下手です=/

4

5 に答える 5

4

Add(string, object)は、次の理由で廃止されました (SQL Server チームの Pablo Castro による)。

問題は、C# と VB.NET コンパイラの両方が、このコードの非常に奇妙な動作を公開することです。

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

これは、オブジェクトを受け取り、値 0 を割り当てるオーバーロードを使用することを期待するかもしれませんが、代わりに、SqlDbType を 2 番目のパラメーターとして受け取るオーバーロードを選択します! Add(string, sqldbtype) と Add(string, object) の間のこの (および潜在的に他の) あいまいさを回避するために、Add(string, object) を廃止し、AddWithValue(string, object) を導入しました。一般に、識別パラメーターの型が「オブジェクト」である複数のオーバーロードをそのうちの 1 つに含めることは危険です。

于 2011-01-19T01:37:34.673 に答える
2

データ型を明示的に指定できるSqlParametersを使用して挿入をパラメーター化する必要があります。(また、クエリが引き起こしたSQLサーバーインジェクション攻撃を理解するという頭痛の種を軽減します)。

例:

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」を付けないでください。これは、文字列定数を使用してユニコード文字列であることを示す場合にのみ使用されます。したがって、クエリは次のようになります。

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 に答える