我正在尝试将一个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检索数据,因为我无法对其进行测试。如果有人能够对如何做到这一点有所启发,那就非常感激,对不好的英语也不好意思,这不是我的第一语言。谢谢
答案 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);