不确定导致此FormatException(字符串 - > int)

时间:2015-09-28 14:02:00

标签: vb.net stored-procedures

我有一个接受DataTable DTint 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

1 个答案:

答案 0 :(得分:1)

强制转换消息告诉您问题 - DataColumn不包含您的数据。尝试引用行中的数据:DR [0],DR [1]等