我正在建立一个允许您将某些数据输入表格的系统。如果数据可能为空,则为某些字段。该过程返回IDENTITY类型的值。下面是使用VB.NET输入数据的子程序:
Public Sub ownersWithReturn(ByVal fName As String)
SqlConn.ConnectionString = Server
Command = New SqlCommand()
Command.CommandType = CommandType.StoredProcedure
Command.CommandText = "EnterIntoPetOwners"
Command.Parameters.Add("@ownername", SqlDbType.VarChar).Value = Clinician.txtOName.Text.Trim
Command.Parameters.Add("@clinicno", SqlDbType.Int).Value = Clinician.lblClinicNum.Text.Trim
Command.Parameters.Add("@owneraddress", SqlDbType.VarChar).Value = Clinician.txtOAddress.Text.Trim
Command.Parameters.Add("@insuno", SqlDbType.Int).Value = Clinician.txtInsuNum.Text.Trim
Command.Parameters.Add("@insudets", SqlDbType.VarChar).Value = Clinician.txtInsurDetails.Text.Trim
Command.Parameters.Add("@id", SqlDbType.Int).Direction = ParameterDirection.Output
Command.Connection = SqlConn
Try
SqlConn.Open()
Command.ExecuteNonQuery()
Dim id As String = Command.Parameters("@id").Value.ToString()
Clinician.lblOwnerNum.Text = id
Clinician.lblOwnerNum.ForeColor = Color.Black
Dim result As Integer
If result = 1 Then
correctMes(1)
nullControls(fName)
Else
errorMes(1)
End If
Catch ex As Exception
MsgBox(ex.Message)
Finally
SqlConn.Close()
End Try
End Sub
以下是用于插入数据的MSSQL PROCEDURE:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[EnterIntoPetOwners]
@ownername VARCHAR(255),
@clinicno INT,
@owneraddress VARCHAR(500),
@insuno INT,
@insudets VARCHAR(500),
@id int output
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO Pet_Owners (Owner_Name,Clinic_No,Owner_Address,Insurance_No,Insurance_Details)
VALUES (@ownername,@clinicno,@owneraddress,@insuno,@insudets)
SET @id=SCOPE_IDENTITY()
RETURN @id
END
可能为null的数据库变量是数据类型为VARCHAR的“@insudets
”和数据类型为INT的“@insuno
”。
使用表单输入数据时,如果上述两个字段为非空,则不会发生错误,但是当它们为空且没有数据可用时,会显示错误“Failed to convert parameter value from a string to Int32
”。
请帮助我。
答案 0 :(得分:0)
如果要在数据库中插入NULL值,则为该参数传递DBNull.Value。根据您的代码,似乎如果两个文本框为空,您希望将匹配字段设置为null。在这种情况下,您检查并选择要插入的值
Dim insuno = IF(string.IsNullOrWhiteSpace(Clinician.txtInsuNum.Text),
DBNull.Value, Clinician.txtInsuNum.Text.Trim)
Dim insudets = IF(string.IsNullOrWhiteSpace(Clinician.txtInsurDetails.Text),
DBNull.Value, Clinician.txtInsurDetails.Text.Trim)
....
Command.Parameters.Add("@insuno", SqlDbType.Int).Value = insuno
Command.Parameters.Add("@insudets", SqlDbType.VarChar).Value = insudets
如果没有此检查,空字符串将转到尝试将其转换为数字的数据库引擎。这会触发异常,因为空字符串无法转换为整数