2013-05-27 78 views
1

在我的項目中,我使用隨機數生成器函數生成一個隨機字符並將其存儲在數據庫中,數字生成正確,但在插入數據期間,它拋出異常「字符串或二進制數據將被截斷」字符串或二進制數據將被截斷...

我的代碼:

protected void trigger() 
{ 
    try 
    { 
     DataSet ds = ExamManagement.SP.table2_SP_Selectall().GetDataSet(); 
     if (ds.Tables[0].Rows.Count > 0) 
     { 
      string a = RandomNumberGenerator(4); 
      string b = RandomNumberGenerator(4); 
      string c = RandomNumberGenerator(4); 
      ExamManagement.SP.table1_insert(a,b,c).Execute(); 
     } 
    } 
    catch (SqlException ex) 
    { 
     ClientMessaging("Error :"+ex); 
    } 
} 

public static string RandomNumberGenerator(int length) 
{ 
    System.Security.Cryptography.RandomNumberGenerator rng = System.Security.Cryptography.RandomNumberGenerator.Create(); 

    char[] chars = new char[length]; 

    //based on your requirment you can take only alphabets or number 
    string validChars = "aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXzZ"; 
    byte[] bytes = new byte[length-1]; 
    for (int i = 0; i < length; i++) 
    { 

     rng.GetBytes(bytes); 

     Random rnd = new Random(bytes[0]); 

     chars[i] = validChars[rnd.Next(validChars.Length)]; 

    } 

    return (new string(chars)); 
} 

我的SQL Server表結構:

Column1, nvarchar(100),null 
    Column2, nvarchar(100),null 
    Column3, nvarchar(100),null 

我改變的存儲過程,

Create Procedure Table1_insert  
    ( 
    @col1 varchar(max),  
    @col2 varchar(max),  
    @col3 varchar(max) 
    )  
    as  
BEGIN  
BEGIN TRY  
Insert into Table1(Column1,Column2,Column3) values (@col1,@col2,@col3)  
END TRY  
BEGIN CATCH      
IF @@TRANCOUNT > 0      
ROLLBACK      
DECLARE @ErrMsg nvarchar(4000), @ErrSeverity int      
SELECT @ErrMsg = ERROR_MESSAGE(),      
@ErrSeverity = ERROR_SEVERITY()      
RAISERROR(@ErrMsg, @ErrSeverity, 1)      
END CATCH  
END 
+2

此消息表示您要填寫列中的內容不適合。所以你可能在你的一列中有超過100個字符。計算您的變量並將其輸出,然後將其插入到數據庫中以查看。 – YvesR

+0

@Yvesr我用Clientmessaging檢查過它,Randomnumbergenerator函數只生成四個字符,例如:sDfT – Rajesh

+0

數據大於字段長度不是很明顯嗎? –

回答

0

在DB列變量現在是在尺寸上比可變數據我已經發至,以便保存我得到了錯誤字符串或二進制數據將被截斷

我有較小通過增加DB中變量的大小來解決錯誤

0

檢查您的存儲過程。你可能忘了指定參數的長度。例如。 @ P1爲nvarchar(1000)

+0

在我的SP中指定的參數是** .coll nvarchar(100),.col2 nvarchar(100),.col3 nvarchar(100)** – Rajesh

+1

如何指定table1_insert方法。您是否使用設計師來創建該方法?您可能想檢查參數映射。如果您忘記指定長度,sql服務器將會佔據一個字符。 – Elmar

+0

我已經編輯我的帖子與存儲過程好心地看到它,並給我的解決方案..... – Rajesh

相關問題