【问题标题】:Error converting data type nvarchar to numeric in query在查询中将数据类型 nvarchar 转换为数字时出错
【发布时间】:2015-08-21 13:20:09
【问题描述】:

我想调用该行的ID,因为我想删除该行。

这是我的代码:-

private void DeleteAttachment(string ID)
{
    using (SqlConnection connection = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ToString()))
    {
        connection.Open();
        string sql = "DELETE FROM EMP_ATTACHED_DOCUMENTS WHERE mkey= @ID";
        using (SqlCommand cmd = new SqlCommand(sql, connection))
        {
            cmd.Parameters.AddWithValue("@ID", ID);
            cmd.CommandType = CommandType.Text;
            cmd.ExecuteNonQuery();
        }
    }
}

protected void GrdTraining_DeleteCommand(object sender, Obout.Grid.GridRecordEventArgs e)
{
    if (Session["dt10"] != null)
    {
        dt10 = (DataTable)Session["dt10"];
    }
    else
    {
        BindDatatable();
    }
    DeleteAttachment(ID);

    DataRow[] grdTrain = dt10.Select("SR_NO=" + Convert.ToString(e.Record["SR_NO"]));
    dt10.Rows.Remove(grdTrain[0]);
    AddToViewState("GrdTraining");
}

但我无法删除该行。当我尝试调试它时,在ID,我得到了_Page

错误信息:

将数据类型 nvarchar 转换为数值时出错

请提出一种调用动态 ID 的方法。

【问题讨论】:

  • 尝试使用显式类型添加而不是使用值添加。
  • 将函数DeleteAttachment参数更改为int
  • 阅读this
  • mkey列的具体数据类型是什么?你能显示hiddelmkey.Value 的值吗?我只是猜测您正在使用整数,但也许您需要使用不同的数字类型。
  • 听起来你应该使用decimal.TryParse。如果它返回false,则string 不是有效的十进制值。

标签: c# sql asp.net gridview


【解决方案1】:

根据您的 cmets,我认为您需要执行以下操作

private void DeleteAttachment(string ID)
{
    decimal numericId;
    if(!decimal.TryParse(ID, out numericId))
    {
        // The ID is not a valid decimal determine what to do in that case.
    }

    using (SqlConnection connection = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ToString()))
    {
        connection.Open();
        string sql = "DELETE FROM EMP_ATTACHED_DOCUMENTS WHERE mkey= @ID";
        using (SqlCommand cmd = new SqlCommand(sql, connection))
        {
            cmd.Parameters.Add("@ID", SqlDbType.Decimal).Value = numericId;
            cmd.CommandType = CommandType.Text;
            cmd.ExecuteNonQuery();
        }
    }
}

或者,您可以将ID 参数更改为DeleteAttachment 方法为decimal,并在方法外部进行解析。

【讨论】:

  • 好的先生,会试试这个让你知道。
  • 先生,我试过你的代码,但它总是进入if(!decimal.TryParse(ID, out numericId)) { // The ID is not a valid decimal determine what to do in that case. }
  • @nadeem 那么您尝试解析的值不是有效格式。你能举例说明ID的值吗?
  • 实际上它起作用了,我犯了一个小错误,这就是它不起作用的原因
【解决方案2】:

在 DeleteAttachment 中我会简单地说:

decimal temp;
if (!Decimal.TryParse(ID, out temp)) { return; }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2016-01-20
    • 1970-01-01
    相关资源
    最近更新 更多