错误:字符串在varchar上无法识别为有效的布尔值?

时间:2014-01-22 13:31:57

标签: asp.net sql vb.net aspxgridview

我有一个带有复选框的gridview,选中后会将所选项目插入两个数据库。错误发生在特定的插入参数,即数据类型为nvarchar。我不确定为什么它会给我一个布尔错误。任何帮助将不胜感激,我可以根据需要发布代码。

1 个答案:

答案 0 :(得分:2)

好的,让我们开始吧。首先,这必须改变:

sqlds1.UpdateCommand = String.Format(
    "UPDATE Fees SET Inactive = '1' WHERE Description = '{0}'",
        Request("cbusno"))

到此:

sqlds1.UpdateCommand = "UPDATE Fees SET Inactive = '1' WHERE Description = @Desc"
sqlds1.UpdateCommand.Parameters.AddWithValue("@Desc", Request("cbusno"))

接下来,这必须改变:

sqlds2.UpdateCommand = String.Format(
    "UPDATE OLLicenses SET lactive = '1' WHERE cbusno = '{0}'",
        Request("cbusno"))

到此:

sqlds2.UpdateCommand = "UPDATE OLLicenses SET lactive = '1' WHERE cbusno = @no")
sqlds2.UpdateCommand.Parameters.AddWithValue("@no", Request("cbusno"))

接下来,您需要在此处使用其他API:

Sqldatasource1.Clear()
Sqldatasource1.InsertParameters.Add("cbusno", Request("cbusno"))
Sqldatasource1.InsertParameters.Add("licsubcategory", tb5.Text)
Sqldatasource1.InsertParameters.Add("description", tb5.Text)
Sqldatasource1.InsertParameters.Add("nfee", tb2.Text)
Sqldatasource1.InsertParameters.Add("lactive", "0")
Sqldatasource1.InsertParameters.Add("tadded", DateTime.Now.ToString())
Sqldatasource1.InsertParameters.Add("cuserid", Session("Username"))
Sqldatasource1.InsertParameters.Add("myfield", Request("myfield"))
Sqldatasource1.Insert()

这允许数据源为您处理输入。

与此块相同:

SqldatasourceFee.InsertParameters.Add("myfield", Request("myfield"))
SqldatasourceFee.InsertParameters.Add("Amount", tb2.Text)
SqldatasourceFee.InsertParameters.Add("CalculatorDescription", (string)clicnotxt.Table(0)(0))
SqldatasourceFee.InsertParameters.Add("Dept", "Business Tax")
SqldatasourceFee.InsertParameters.Add("Module", "Business Tax")
SqldatasourceFee.InsertParameters.Add("Type", tb4.Text)
SqldatasourceFee.InsertParameters.Add("SubType", tb5.Text)
SqldatasourceFee.InsertParameters.Add("Inactive", "0")
SqldatasourceFee.InsertParameters.Add("UserCreated", Session("Username"))
SqldatasourceFee.InsertParameters.Add("Description", Request("cbusno"))
SqldatasourceFee.Insert()

现在,请注意几件事。首先,请注意我已将此值投放到string此处(string)clicnotxt.Table(0)(0)。这个值对我很怀疑,但我不相信这是你错误的根源。我认为这里的问题是这样的:

SqldatasourceFee.InsertParameters.Add("Inactive", "0")

我在想,但不能100%肯定,它应该是:

SqldatasourceFee.InsertParameters.Add("Inactive", "False")

最后,当您构建SqlDataSource内嵌时,如下所示:

Dim sqlds1 As SqlDataSource = New SqlDataSource()

您需要将其包装在Using中,因为它实现了IDisposable

Using sqlds1 As SqlDataSource = New SqlDataSource()
    sqlds1.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings("myconnectionstring").ConnectionString
    sqlds1.UpdateCommand = "UPDATE Fees SET Inactive = '1' WHERE Description = @Desc"
    sqlds1.UpdateCommand.Parameters.AddWithValue("@Desc", Request("cbusno"))
End Using