【问题标题】:input string not in correct format...when converting a string to datetime...error?输入字符串格式不正确...将字符串转换为日期时间时...错误?
【发布时间】: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#


【解决方案1】:

确保您的输入字符串为您当前的文化使用小数点符号!。如果您的输入字符串与这些规则不匹配,decimal.Parse 将抛出 Input string was not in a correct format 异常

例如,如果您使用不变的文化:

decimal.Parse("17.5", CultureInfo.InvariantCulture)

点将是可接受的小数点。

你可以在MSDN阅读更多关于它的信息

他们还提到decimal.TryParse 方法更适合不变文化解析

另外(显然),请确保您的输入字符串不为空、空或包含任何非数字字符(除了一个,可选的,点或逗号,具体取决于您的文化)

【讨论】:

  • 真的吗?我不这么认为。 13.37 正是在许多英语国家都使用的十进制数的一个例子。
  • 啊,我的错! decimal.Parse 是特定于文化的!如果我例如做decimal.Parse("17.5", CultureInfo.GetCultureInfo("en-US").NumberFormat),它将正确解析。
  • 我认为默认的文化是“en-US”,至少我的项目中是这样的。这不是您环境中的默认设置吗?
  • 我来自瑞典,所以我有“sv-SE”。我们显然使用逗号。但是,我已经用一些相关信息更新了答案!
  • 问题似乎是空文本框。现在我有 2 个问题......第一个是,我如何允许查询中的空文本框?第二个是...... splitfunction 似乎不起作用。我检查了几个文本框,现在我在“sqlDA.Fill(dS)”行收到此错误...“转换 varchar 值 '1;5;' 时转换失败到数据类型 int。”
猜你喜欢
  • 2014-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-14
  • 1970-01-01
相关资源
最近更新 更多