我有一个接受DataTable DT
和int userID
然后使用DT
中的值执行存储过程的方法:
TempDS = New DataSet
DR = DTable.Rows(0)
StrQuery = "Execute usp @aPreAdmID = @PreAdmID"
StrQuery += " @aPassword = @Password"
StrQuery += " @aUserID = @UserID"
StrQuery += " @aUser = @User"
StrQuery += " @aAdmDtm = @AdmDtm"
StrQuery += " @aComment = @Comment"
StrQuery += " @aFacCode = @FacCode"
StrQuery += " @aIsLDAP = @IsLDAP"
Dim cmd As SqlCommand = New SqlCommand(StrQuery)
cmd.Parameters.Add("@PreAdmID", DR.Table.Columns(0).ToString()).DbType = DbType.Int32
cmd.Parameters.Add("@Password", DR.Table.Columns(1).ToString()).DbType = DbType.String
cmd.Parameters.Add("@UserID", DR.Table.Columns(2).ToString()).DbType = DbType.Int32
cmd.Parameters.Add("@User", DR.Table.Columns(3).ToString()).DbType = DbType.String
cmd.Parameters.Add("@AdmDtm", DR.Table.Columns(5).ToString()).DbType = DbType.String
cmd.Parameters.Add("@Comment", DR.Table.Columns(6).ToString()).DbType = DbType.String
cmd.Parameters.Add("@FacCode", DR.Table.Columns(7).ToString()).DbType = DbType.String
cmd.Parameters.Add("@IsLDAP", DR.Table.Columns(8).ToString()).DbType = DbType.Int32
Dim pObjDataAdaptor As New SqlClient.SqlDataAdapter
pObjDataAdaptor.SelectCommand = cmd
pObjDataAdaptor.SelectCommand.CommandTimeout = 3600
pObjDataAdaptor.Fill(TempDS, aStrDSName)
DR.Table
中的值如下:
0.) 123 1.) myPassword 2.) 456 3.) myUserName 4.) empty string 5.) empty string 6.) empty string 7.) MUDS 8.) 0
DataRow
中有一个额外的列,但此存储过程不会使用它,这就是我在添加参数时跳过索引4
的原因。
最后,存储过程定义如下:
ALTER PROCEDURE [dbo].[usp]
(
@PreAdmID INT
,@aUserID INT = NULL
,@aUser varchar(255)
,@aComment varchar(2048) = NULL
,@aAdmDtm varchar(2048) = NULL
,@aPassword varchar(15)
,@aFacCode varchar(10)
,@aIsLDAP INT
)
当我运行它时,我得到System.FormatException
:
无法将参数值从String转换为Int32。输入字符串的格式不正确
我不知道出了什么问题。在添加参数时,唯一应该是Integers
的参数定义为。
编辑我尝试删除我的int参数上的ToString()
,这会导致另一个异常:
System.InvalidCastException
:
无法将参数值从DataColumn转换为Int32
答案 0 :(得分:1)
强制转换消息告诉您问题 - DataColumn不包含您的数据。尝试引用行中的数据:DR [0],DR [1]等