2012-09-18 11 views
6

पैरामीटर के रूप में डेटाटेबल मैं डेटाटेबल को संग्रहीत प्रक्रिया के पैरामीटर के रूप में उपयोग करने की इस विधि का पुन: उपयोग कर रहा हूं और यह बहुत अच्छा काम कर रहा है।एक बाइट [] फ़ील्ड के साथ डेटाटेबल एक संग्रहीत प्रक्रिया

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

समस्या पैदा होती है जब क्षेत्र मैं जोड़ना चाहते हैं एक द्विआधारी प्रकार की है: यह सरल बनाया काम कर कोड है। यानी .:

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

डेटाबेस में संगत स्तंभ varbinary(MAX) माध्यम से है।

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

मैं कैसे संपादित कर सकता है कि मैं क्या यह काम करने के लिए है: जब मैं इस चलाने का प्रयास है, मैं इस त्रुटि मिलती है?

+0

जैसा कि आप बाइट जानते हैं [] एक डेटाटाइप नहीं है, –

+0

के बजाय बाइट का उपयोग करें, लेकिन एक सरणी एक डेटाटाइप है ... – kei

उत्तर

9

.NET में बाइनरी स्ट्रिंग के लिए प्रतिनिधित्व SqlBinary structure है।

आप इस तरह अपने स्तंभ जोड़ना चाहते हैं:

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

SqlBinary वर्ग एक explicit conversion to a byte array और एक implicit conversion from a byte array, तो स्तंभ के लिए एक बाइट सरणी से महत्व है, काम का एक सरल बात है, जबकि एक हो रही कॉलम से बाइट सरणी को एक स्पष्ट कलाकार की आवश्यकता होती है।

+2

+1 अच्छी तरह से मिला! यह स्पष्ट होगा कि कोड जो 'डेटाटेबल' को SQL सर्वर पर भेजता है, 'टाइपफ़ोफ़ (बाइट [])' कॉलम के लिए अपवाद फेंक देता है। SQL सर्वर त्रुटि संदेश कुछ भी स्पष्ट है। – Andomar

+0

@casperOne - इस उत्तर को पोस्ट करने के लिए धन्यवाद - यह वास्तव में मेरी मदद करता है! दुर्भाग्य से, [मुझे किनारे के मामले में एक ही समस्या का सामना करना पड़ा है] (http://stackoverflow.com/questions/35782496/empty-datatable-causes-errors-when-table-valued-parameter-has-varbinary-types) । अगर आपको कोई विचार है तो मुझे यह सुनना अच्छा लगेगा :-) –

संबंधित मुद्दे