簡體   English   中英

使用ExecuteNonQuery時丟失\\

[英]lose \ when using ExecuteNonQuery

我正在嘗試將單個值插入SQL數據庫。 只要我不插入“ \\”,它就可以正常工作。 如果這樣做,那么數據庫中將丟失一個“ \\”。

例如,在調試器中,我看到以下命令文本:

Insert into tblProjekte (Projektbezeichnung) values ('\\bla\\bla\\bla')

但是在SQL Server Profiler中,我總是會找到以下插入語句:

Insert into tblProjekte (Projektbezeichnung) values ('\bla\bla\bla')

我的源代碼:

public void InsertProjekt(string Projektbezeichnung)
{
    SqlConnection con = new SqlConnection();
    con.ConnectionString = "Server=localhost; Database=myProjekt; UID=user; PWD=pwd";
    con.Open();

    SqlCommand com = new SqlCommand();
    com.Connection = con;
    com.CommandText = String.Format("Insert into tblProjekte (Projektbezeichnung) values ('{0}')",@Projektbezeichnung);
    int rows = com.ExecuteNonQuery();        
}

將源代碼更改為:

SqlCommand com = new SqlCommand("INSERT INTO tblProjekte (Projektbezeichnung) VALUES (@Projektbezeichnung)");
            com.Parameters.AddWithValue("@Projektbezeichnung", Projekt.Projektbezeichnung);

我在調試過程中獲得了以下信息: 在此處輸入圖片說明

值是“ \\\\ Tesafilm”,SQLValue是“ \\ Tesafilm”

請改用參數化查詢

public void InsertProjekt(string Projektbezeichnung)
{
    SqlConnection con = new SqlConnection();
    con.ConnectionString = "Server=localhost; Database=myProjekt; UID=user; PWD=pwd";
    con.Open();

    SqlCommand com = new SqlCommand();
    com.Connection = con;
    com.CommandText = "Insert into tblProjekte (Projektbezeichnung) values (@value)"
    com.Parameters.AddWithValue("@value", Projektbezeichnung);

    int rows = com.ExecuteNonQuery();

}

正如一些注釋所指出的那樣, \\字符是SQL中的“轉義字符”。 當您在不使用正確的轉義字符串的情況下插入它時,SQL會將其刪除,因為它將它們解釋為只是轉義字符。

您正在使用string.Format()來模擬參數化查詢,但這並不會真正消除它。 但是,如果使用SqlCommand.Parameters.AddWithValue() ,它將解決您的問題:

SqlCommand com = new SqlCommand("INSERT INTO tblProjekte (Projektbezeichnung) VALUES (@Projektbezeichnung)");
com.Parameters.AddWithValue("@Projektbezeichnung", Projektbezeichnung);
com.Connection = con;
int rows = com.ExecuteNonQuery();

有關SqlCommand.Parameters集合的更多信息,請在MSDN上此處進行檢查。 它提供了一些“添加”方法,它們可能更適合於不同的場景-盡管常規.AddWithValue()在這種情況下應該可以正常工作。

更新 :將我原來的.Add()更改為.AddWithValue()因為MSDN聲明SqlParameterCollection.Add()已被棄用,而推薦使用.AddWithValue()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM