2011-10-08 73 views
0

我試圖插入值,以我的表包含VARBINARY(MAX),並將該文件我嘗試插入爲byte []插入SQL Server中的文件爲varbinary(MAX)2008

public DataTable add1(string docName , byte[] doc) 
{ 
    DBAdaptor db = new DBAdaptor(); 
    string query = "INSERT INTO [Document] (DocumentName, DocumentData) OUTPUT  inserted.DocumentID VALUES  (N'" + docName + "' , " + doc + ")"; 
    return db.QueryRide(query); 
} 

並且我得到以下例外:

對象或列名缺失或爲空。對於SELECT INTO 語句,請確認每列都有一個名稱。對於其他語句,請查看 以獲取空白別名。別名定義爲「」或[]是不允許的。 將別名更改爲有效的名稱。

''附近的語法不正確。

這裏是執行我的查詢功能:

public DataTable QueryRide(string query) 
{ 
    DataTable dt = new DataTable(); 
    string conStr = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;   
    SqlConnection con = new SqlConnection(conStr); 
    SqlCommand cmd = new SqlCommand(query, con); 
    SqlDataAdapter da = new SqlDataAdapter(cmd); 
    try 
    { 
     con.Open(); 
     da.Fill(dt); 
    } 
    catch (Exception) 
    { 
     throw; 
    } 
    finally 
    { 
     if (con.State == ConnectionState.Open) 
      con.Close(); 
    } 
    return dt; 
} 

我怎麼可以插入這個字節[]我的表?感謝

+0

的可能重複[SQL:順序上做varbinary列UPDATE .WRITE(http://stackoverflow.com/questions/1942609/sql-sequentially-doing-update- write-on-varbinary-column) – bzlm

+0

您應該**總是**使用**參數化查詢**而不是將您的SQL語句連接在一起!否則,你處於SQL注入攻擊的高風險.... –

回答

3

試試這個:

private static int insertDocument(string name, byte[] data) 
{ 
    using (SqlConnection cn = new SqlConnection("...")) 
    using (SqlCommand cm = cn.CreateCommand()) 
    { 
     cm.CommandText = @" 
      INSERT INTO [Document] (DocumentName, DocumentData) 
      OUTPUT  inserted.DocumentID 
      VALUES  (@Name, @Data)"; 
     cm.Parameters.AddWithValue("@Name", name); 
     cm.Parameters.AddWithValue("@Data", data); 
     cn.Open(); 
     return (int)cm.ExecuteScalar(); 
    } 
} 
+0

謝謝,它工作得很好。但有什麼區別?當我想選擇這個我應該寫這樣的一些查詢?再次感謝:) – ePezhman

+0

我不知道DBAdaptor是如何工作的(它是原生的嗎?),但內部它應該做同樣的事情。此外,請始終使用參數化查詢,就像marc_s所說的 –

+0

DBAdaptor具有類似於上面我剛添加的功能。 – ePezhman

相關問題