繁体   English   中英

将数据类型 varchar 转换为数字 C# 应用程序时出错

[英]Error converting data type varchar to numeric c# Application

我有一个 SQL Server 数据库表,我正在使用我的 C# 应用程序连接到 SQL,查看该表并将值返回到表单上的文本框中。 但是,当我单击按钮时,出现以下错误:

将数据类型 varchar 转换为数字 C# 应用程序时出错

我的代码在这里:

private void buttonFilter_Click(object sender, EventArgs e)
{
    try
    {
        using (SqlConnection sqlCon = new SqlConnection(connectionString))
        {
            sqlCon.Open();

            SqlDataAdapter sqlDa = new SqlDataAdapter(string.Format(
                "SELECT {0} FROM {1} WHERE {2} = " + SearchBox.Text.ToString(), 
                 ConfigurationManager.AppSettings["SQLFirst3FieldResults"],
                 ConfigurationManager.AppSettings["SQLTableName"],
                 ConfigurationManager.AppSettings["SQLSearchColumn"]), sqlCon);

            DataTable dtbl = new DataTable();
            sqlDa.Fill(dtbl);

            debtTypeResult.Text = dtbl.Rows[0][0].ToString();
            customerNameResult.Text = dtbl.Rows[0][1].ToString();
            customerIDResult.Text = dtbl.Rows[0][2].ToString();

            label1.Visible = true;
            label2.Visible = true;
            label3.Visible = true;
            debtTypeResult.Visible = true;
            customerNameResult.Visible = true;
            customerIDResult.Visible = true;
            button1.Visible = true;
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

首先你的代码用引号包围搜索值的最小修正:

SqlDataAdapter sqlDa = new SqlDataAdapter(string.Format(
                "SELECT {0} FROM {1} WHERE {2} = '" + SearchBox.Text.ToString() + "'", 
                 ConfigurationManager.AppSettings["SQLFirst3FieldResults"],
                 ConfigurationManager.AppSettings["SQLTableName"],
                 ConfigurationManager.AppSettings["SQLSearchColumn"]), sqlCon);

            DataTable dtbl = new DataTable();

            sqlDa.Fill(dtbl);

然而,这种方法根本不值得推荐,因为

  • 它让您对 SQL 注入持开放态度
  • 您必须手动检查和处理搜索字符串中的引号/撇号

建议您尽可能使用参数。 如果您搜索其中包含单引号的值,则更安全且查询不会中断:

SqlDataAdapter sqlDa = new SqlDataAdapter($"SELECT {ConfigurationManager.AppSettings["SQLFirst3FieldResults"]} FROM {ConfigurationManager.AppSettings["SQLTableName"]} WHERE {ConfigurationManager.AppSettings["SQLSearchColumn"]} = @which", sqlCon);

sqlDa.SelectCommand.Parameters.AddWithValue("@which", SearchBox.Text.ToString());

DataTable dtbl = new DataTable();
sqlDa.Fill(dtbl);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM