【发布时间】:2013-06-03 04:10:34
【问题描述】:
我正在尝试将参数传递给 sql 选择查询。
出于某种原因,无论我尝试什么,我都会不断收到相同的错误: 输入的字符串不是正确的格式
和建议: 将字符串转换为日期时间时,在将每个变量放入日期时间对象之前解析字符串以获取日期。
我不知道该怎么做。这是代码。
sql查询:
ALTER PROCEDURE SearchAllPlayers
(
@personName,
@personPay,
@IDs
)
SELECT DISTINCT
person.personID, sports.sportsID, person.personName, person.personPay, sports.sport,
FROM sports INNER JOIN
person INNER JOIN
personSport ON personSport.personID = person.personID
INNER JOIN
personSport ON personSport.sportID = sports.sportsID
WHERE (person.personName LIKE '%' + @personName + '%')
AND
(person.personPay >= @personPay OR 0 = @personPay)
AND
(person.regDate >= { fn CURDATE() }
AND
(sports.sportID IN
(SELECT ID FROM dbo.fnSplitter(@IDs) AS fnSplitter_1) OR @IDs = 0)
代码隐藏:
protected void Button1_Click(object sender, EventArgs e)
{
searchGrid();
}
protected void searchGrid()
{
SqlConnection conn = new SqlConnection(connSTR);
com = new SqlCommand();
conn.Open();
com.Connection = conn;
com.CommandText = "SearchAllPlayers";
com.CommandType = CommandType.StoredProcedure;
string StringWithDelimiter = string.Empty;
for (int i = 0; i < DropDownCheckBoxes1.Items.Count; i++)
{
if (DropDownCheckBoxes1.Items[i].Selected)
StringWithDelimiter += DropDownCheckBoxes1.Items[i].Value + ";";
}
com.Parameters.Add("@personName", SqlDbType.VarChar).Value = personName.Text;
//next line is where I am having problems
com.Parameters.Add("@personPay", SqlDbType.Decimal).Value = ??????
com.Parameters.Add("@IDs", SqlDbType.VarChar).Value = StringWithDelimiter;
so far i've tried the following combinations, all to know avail.
com.parameters.add("@playerPay", sqldbtype.decimal).value = playerPayTextBox.Text;
这似乎不起作用,我收到以下错误: “将数据类型 nvarchar 转换为十进制时出错。”
然后我尝试了这个:
com.parameters.add("@playerPay", sqldbtype.decimal).value = playerPayTextBox.tostring();
我得到同样的错误: “将数据类型 nvarchar 转换为十进制时出错。”
这是有道理的,所以我尝试了:
com.parameters.add("@playerPay", sqldbtype.decimal).value = decimal.parse(playerPayTextBox.tostring());
错误:“输入字符串的格式不正确。” - 然后是日期时间的事情......
com.parameters.add("@playerPay", sqldbtype.decimal).value = decimal.parse(playerPayTextBox.text);
错误:“输入字符串的格式不正确。” - 然后是日期时间的事情......
com.parameters.add("@playerPay", sqldbtype.decimal).value = convert.todecimal(playerPayTextBox.text);
错误:“输入字符串的格式不正确。” - 然后是日期时间的事情......
com.parameters.add("@playerPay", sqldbtype.decimal).value = convert.todecimal(playerPayTextBox.text);
错误:“输入字符串的格式不正确。” - 然后是日期时间的事情......
不知道怎么办
【问题讨论】:
-
有问题的输入字符串是什么?
-
显然playerPayTextBox.Text不代表十进制数。您应该检查文本框应该接受哪些值。
-
你试过调试playerPayTextBox.Text的值是多少?
-
我应该提到我是一个初学者。我一直在关注教程,所以非常不确定我为什么会遇到这个问题。
-
@king king:我如何检查文本框接受的值?到目前为止,在我的查询中,我最关心的是复选框列表以及拆分功能是否有效。所以我把文本框留空了。
标签: c#