ストアド プロシージャを使用して 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 を設定しました