试图将SQL条目转换为C#

时间:2017-03-12 12:58:01

标签: c# sql asp.net sql-server

我正在尝试将一个SQL条目输入C#,然后将条目值设置为十进制 - 价格。

我正在将SQL条目的结果写入控制台,然后尝试再次读取它,但它只允许我将其作为INT读取。

{
public partial class Purchase : System.Web.UI.Page
{   

    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void purchaseButton_Click(object sender, EventArgs e)
    {
        SqlConnection sqlConnection1 = new SqlConnection("Data Source=DELETED);
        SqlCommand cmd = new SqlCommand();
        SqlDataReader reader;

        string url = HttpContext.Current.Request.Url.AbsoluteUri;
        char ID = url[url.Length - 1];
        cmd.CommandText = "SELECT Price FROM customerData where ProductId =" + ID;
        cmd.CommandType = CommandType.Text;
        cmd.Connection = sqlConnection1;

        sqlConnection1.Open();

        reader = cmd.ExecuteReader();
        while (reader.Read())
        {
            ReadSingleRow((IDataRecord)reader);
        }

        int Price = Console.Read();
        PriceTest.Text = Price.ToString();

        reader.Close();




        sqlConnection1.Close();

    }
         private static void ReadSingleRow(IDataRecord record)
    {
        Console.WriteLine(String.Format("{0}, {1}", record[0], record[1]));

    }

出于显而易见的原因,我故意从此删除了我的数据源。

我试图让代码符合以下几行:

Decimal Price = Console.Read();

我不确定这种方法是否适用于从SQL检索数据,因为我无法对其进行测试。如果有人能够对如何做到这一点有所启发,那就非常感激,对不好的英语也不好意思,这不是我的第一语言。谢谢

1 个答案:

答案 0 :(得分:1)

您无法通过将数据转储到控制台然后将其读回来从数据库中读取,控制台用于输入/输出用户输入/输出,而不是用于复制代码中的数据。

要获取所需的十进制值,请在ReadSingleRow方法中使用  decimal price = (Decimal)record[0]如果数据在数据库中是十进制的,或decimal price = Convert.ToDecimal(record[0])如果数据不是。

另外,正如@Milney在评论中所说,你有一个SQL注入漏洞,你需要将你的SQL更改为:

cmd.CommandText = "SELECT Price FROM customerData where ProductId = @ID";
cmd.Parameters.AddWithValue("@ID",ID);