2012-10-15 126 views
0

我想使用存儲過程在SQL Server 2008 R2表中插入一條記錄。我正在「試圖」爲數據庫訪問編寫一個通用類。ASP.NET,SQL Server 2008 R2,System.OverflowException

下面是.VB文件中的代碼:

Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load 
    If PreviousPage IsNot Nothing AndAlso PreviousPage.IsCrossPagePostBack Then 
     Dim params(5) As SqlParameter 
     params(0) = New SqlParameter("@Name", PreviousPage.Name.Text) 
     params(1) = New SqlParameter("@Qualification", PreviousPage.Qualification.Text) 
     params(2) = New SqlParameter("@ContactNo", PreviousPage.ContactNo.Text) 
     params(3) = New SqlParameter("@Expertise", PreviousPage.Expertise.Text) 
     params(4) = New SqlParameter("@Comments", PreviousPage.Comments.Text) 
     params(5) = New SqlParameter("@Affiliation", PreviousPage.Affiliation.Text) 
     DAL.DoInsertSP(params) 
    End If 
End Sub 

下面是DAL.DoInsertSP()的代碼:

Public Shared Function DoInsertSP(ByRef params As Array) As Byte 
    Dim result As Byte = 0 
    CreateConnection() 
    cmd = New SqlCommand("sp_InsertExpert", conn) 
    cmd.CommandType = CommandType.StoredProcedure 
    cmd.Parameters.AddRange(params) 
    Try 
     result = CByte(cmd.ExecuteNonQuery()) 
    Catch ex As Exception 
     conn.Dispose() 
    End Try 
    Return result 
End Function 

的代碼拋出System.OverflowException:算術運算導致溢出。

這裏的PROC腳本sp_InsertExpert

USE [dbherpes] 

GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [DBO]。[sp_InsertExpert]
@Name nvarchar(30)= null,
@Qualification爲nvarchar(40)=零,
@ContactNo爲nvarchar(13)=零,
@Expertise爲nvarchar(30)=零,
@Comments爲nvarchar(100)=零,
@Affiliation爲nvarchar(50 )= null AS
BEGIN
SET NOCOUNT ON;
INSERT INTO專家(名稱,資質,ContactNo,專業知識,評論,所屬)VALUES(@Name,@Qualification,@ContactNo,@Expertise,@Comments,@Affiliation)
END

這裏的結構表:

enter image description here

我怎樣才能解決這個嗎?

UPDATE

我已經設置ID列的標識規格=「是」,標識增量= 1,恆等式種子= 1

+2

你的'ID'不應該是int嗎? –

+0

將.NET全部切割出來,並使用相同的數據從SQL Managment Studio運行sp_InsertExpert,您會得到什麼? –

回答

1

你沒有在其異常是發生的行號?

通過看你的代碼:

的ExecuteNonQuery

返回一個int按http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery.aspx

我建議的輸出不轉換成字節,而是比較CMD。的ExecuteNonQuery()的值,如> 0

對於UPDATE,INSERT和DELETE語句,返回值是 數目該命令影響的行。當插入或更新的 表中存在觸發器時,返回值包括受插入或更新操作影響的行的編號 以及受觸發器或觸發器影響的行的編號 。對於所有其他類型的 語句,返回值爲-1。如果發生回滾,則返回值 的值也是-1。

+0

Daniel A. White提出的解決方案適用於我。在應用他發佈的修復之後,我在Management Studio中打開了表,發現「我認爲沒有存儲在數據庫中的行」也在修復後插入的行中。 –