2015-06-05 55 views
2
 public void updateSkills(DataTable candidateSkillSets) 
    { 
     string sqlCommand = "Sp_Candidate"; 
     DbCommand dbCommand = db.GetStoredProcCommand(sqlCommand); 
     db.AddInParameter(dbCommand, "candidateSkillSets",DbType.Object, candidateSkillSets); 
     db.ExecuteNonQuery(dbCommand); 
    } 

我有一个像上面这样的方法,不采取数据表类型。我知道在ADO中我们可以使用“SqlDbType.Structured”,但对于企业版本库而言,它不起作用。我不得不使用什么?从ASP.NET使用企业库向SQL Server传递(数据表)

我得到下面的错误而执行所述命令

“传入的表格格式的数据流(TDS)远程过程调用(RPC) 协议流不正确参数1。(” @candidateSkillSets“): 数据类型0x62(sql_variant)对于特定于类型的 元数据具有无效类型。“

回答

0

“DbType.Structured”表值参数在企业库中不受支持。如果要将表用作存储过程或查询的参数,则必须使用基础存储连接和在此提供的支持。

+0

能否请您详细阐述更多... – ch123

+0

可以使用SqlDbType.Structured也是企业库 –

+0

中存在企业库 –

-1

DbType.Structured表值参数没有在企业库的支持,但它是更多钞票来这样使用:

db = DatabaseFactory.CreateDatabase() 
Using cmd As DbCommand = db.GetStoredProcCommand("Sp_Candidate") 
    db.AddInParameter(cmd, "@candidateid", DbType.Int32, txtCandidateID.text) 
    cmd.Parameters.Add(New SqlParameter("candidateSkillSets", candidateSkillSets) With {.SqlDbType = SqlDbType.Structured}) 
    db.ExecuteNonQuery(cmd) 
End Using 

How to pass an array into a SQL Server stored procedure

6

我要修改@爱德华多的代码,以使我工作在我的情况与企业库:

public int Insert(int id, DTO mnemonics) 
    { 
     DatabaseProviderFactory factory = new DatabaseProviderFactory(); 
     Database Db = factory.CreateDefault(); 

     using (var dbCommand = Db.GetStoredProcCommand("spINSERT")) 
     { 
      using (var table = new DataTable()) 
      { 
       table.Columns.Add("Key", typeof(string)); 
       table.Columns.Add("Value", typeof(string)); 
       foreach (KeyValuePair<string, string> item in mnemonics.data) 
       { 
        var row = table.NewRow(); 
        row["Key"] = item.Key; 
        row["Value"] = item.Value; 
        table.Rows.Add(row); 
       } 

       Db.AddInParameter(dbCommand, "id", DbType.int, id); 
       SqlParameter p = new SqlParameter("MNEMONICS", table); 
       p.SqlDbType = SqlDbType.Structured; 
       dbCommand.Parameters.Add(p); 

       Db.ExecuteNonQuery(dbCommand); 
      } 
     } 
    } 

我在SQL Server中的类型:

CREATE TYPE [dbo].[StringDict] AS TABLE(
    [Key] [varchar](max) NULL, 
    [Value] [varchar](max) NULL 
) 

我希望帮助别人