2012-09-18 12 views
6

VeriTable'ı bir saklı yordama parametresi olarak kullanmak için bu yöntemi yeniden kullanıyorum ve harika çalışıyor.DataTable saklı bir yordamın parametresi olarak bir bayt [] alanı ile

using (dbEntities dbe = new dbEntities()) 
{ 
    var dt = new dataTable(); 
    dt.Columns.Add("ID"); 
    dt.Columns.Add("Message"); 
    dt.Columns.Add("CreatedOn", typeof(DateTime)); 

    foreach (var row in randomDataSource) 
    { 
     dt.Rows.Add(
      row.id, 
      row.message, 
      DateTime.Now 
      ); 
    } 

    var tableType = new SqlParameter("tableType", SqlDbType.Structured); 
    tableType.Value = dt; 
    tableType.TypeName = "[dbo].[RandomTableType]"; 

    dbe.ExecuteStoreCommand(
     "EXEC [dbo].[SaveTable] @tableType", 
     new object[] { tableType } 
     ); 
} 

eklemek istiyorum alan bir ikili Çeşidi olduğunda ortaya çıkmaktadır: Bu basitleştirilmiş çalışma kodudur. yani .:

dt.Columns.Add("BinaryMessage", typeof(byte[])); 

veritabanında karşılık gelen sütun arada varbinary(MAX) olup.

Implicit conversion from data type nvarchar(max) to varbinary(max) is not allowed. Use the CONVERT function to run this query.

nasıl bu işi yapmak için ne değiştiririm: Bu çalıştırmayı denediğinizde, bu hatayı alıyorum?

+0

bildiğiniz gibi, byte [] bir veri türü değil, –

+0

yerine byte kullanın Ama bir dizi bir veri türüdür ... – kei

cevap

9

.NET'te ikili bir dizenin gösterimi SqlBinary structure'dur.

Böyle Sütununuzu eklemek istiyorum: Bir elde ederken

dt.Columns.Add("BinaryMessage", typeof(SqlBinary)); 

SqlBinary sınıf bir explicit conversion to a byte array ve implicit conversion from a byte array, bu nedenle kolona bir bayt diziden değere sahiptir, atama basit bir mesele olduğunu Sütundan bayt dizisi, açık bir yayın gerektirir.

+2

+1 İyi bir bilgi! 'DataTable'ı SQL Server'a gönderen kodun bir' typeof (byte []) 'sütunu için bir istisna atması daha açık olacaktır. SQL Server hata mesajı açık ama net bir şey. – Andomar

+0

@casperOne - Bu cevabı gönderdiğiniz için teşekkürler - gerçekten bana yardımcı oldu! Ne yazık ki, [Bir kenar durumda benzer bir sorunla karşılaştım] (http://stackoverflow.com/questions/35782496/empty-datatable-causes-errors-when-table-valued-parameter-has-varbinary-types) . Herhangi bir düşünceniz varsa duymak isterim :-) –

İlgili konular