2015-06-05 4 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); 
    } 

У меня есть метод, как выше, здесь я прохождения DataTable хранимой процедуры путем добавления параметра. «DbType.Object» является не принимая тип данных. Я знаю, что в ADO мы можем использовать «SqlDbType.Structured», но для корпоративного libray он не работает. Что я должен использовать вместо этого?Pass (Таблица данных) для SQL Server из ASP.NET с помощью Enterprise Library

Я получаю следующее сообщение об ошибке при выполнении команды

«Поступающий поток данных в табличной форме (TDS) удаленный вызов процедур (RPC) поток протокола неверен Параметр 1. (» @candidateSkillSets "): Тип данных 0x62 (sql_variant) имеет недопустимый тип для метаданных для конкретного типа. "

ответ

0

«DbType.Structured» Таблица значных параметры не поддерживаются в библиотеке предприятия. Если вы хотите использовать таблицу в качестве параметра для хранимой процедуры или запроса, вам придется использовать базовое хранилище хранилища и поддержку, предоставляемую там.

+0

Не могли бы вы подробнее рассказать ... – ch123

+0

вы можете использовать SqlDbType.Structured также в Enterprise Library –

+0

нет Альтернативы DbType.Structured в Enterprise Library –

-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 
) 

Я надеюсь, что кто-то помочь