2015-06-05 82 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 
) 

我希望幫助別人