使用Enterprise Library从ASP.NET传递(数据表)到SQL Server

ch1*_*123 3 c# asp.net enterprise-library

     public void updateSkills(DataTable candidateSkillSets)
     {
         string sqlCommand = "Sp_Candidate";
         DbCommand dbCommand = db.GetStoredProcCommand(sqlCommand);
         db.AddInParameter(dbCommand, "candidateSkillSets",DbType.Object, candidateSkillSets);
         db.ExecuteNonQuery(dbCommand);
     }
Run Code Online (Sandbox Code Playgroud)

我有一个像上面这样的方法,这里我通过添加参数将数据表传递给存储过程."DbType.Object"没有采用数据表类型.我知道在ADO中我们可以使用"SqlDbType.Structured",但对于企业库,它不起作用.我需要用什么呢?

执行命令时出现以下错误

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

Dav*_*iró 11

我必须修改@ eduardo的代码,让我在Enterprise Library中工作:

    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);
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

我在SQL Server中的类型:

CREATE TYPE [dbo].[StringDict] AS TABLE(
    [Key] [varchar](max) NULL,
    [Value] [varchar](max) NULL
)
Run Code Online (Sandbox Code Playgroud)

我希望能帮助别人