0

ストアド プロシージャを使用して SQL Server 2008 R2 テーブルにレコードを挿入しようとしています。データベース アクセス用のジェネリック クラスを作成しようとしています。

.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]  


SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON
GO ALTER PROCEDURE [dbo].[sp_InsertExpert] @Name nvarchar(30) = null、 @Qualification nvarchar(40) = null、 @ContactNo nvarchar(13) = null、 @Expertise nvarchar(30 ) = null、 @Comments nvarchar(100) = null、 @Affiliation nvarchar(50) = null AS BEGIN SET NOCOUNT ON; INSERT INTO Expert (Name, Qualification, ContactNo, Expertise, Comments, Affiliation) VALUES (@Name, @Qualification, @ContactNo, @Expertise, @Comments, @Affiliation) END












テーブルの構造は次のとおりです。

ここに画像の説明を入力

どうすればこれを修正できますか?

アップデート

ID 列の Identity Specification = 'Yes'、Identity Increment = 1、Indentity Seed = 1 を設定しました

4

1 に答える 1

1

例外が発生している行番号がありませんか?

あなたのコードを見ることによって:

ExecuteNonQuery

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery.aspxに従ってINTを返します

出力をバイトに変換するのではなく、cmd.ExecuteNonQuery()を次のような値と比較することをお勧めします> 0

UPDATE、INSERT、およびDELETEステートメントの場合、戻り値はコマンドの影響を受ける行数です。挿入または更新される表にトリガーが存在する場合、戻り値には、挿入または更新操作の両方の影響を受ける行数と、1つまたは複数のトリガーの影響を受ける行数が含まれます。他のすべてのタイプのステートメントの場合、戻り値は-1です。ロールバックが発生した場合、戻り値も-1になります。

于 2012-10-15T18:54:57.477 に答える