2011-10-08 75 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

相关问题