从OleDb数据库检索数据时出错

时间:2015-04-21 05:43:44

标签: c# winforms oledb

我正在为我编写此代码的Bank项目工作 但是,对于存款/提款交易,我收到错误

  

错误1'字符串'不包含'getDouble'和no的定义   扩展方法'getDouble'接受类型的第一个参数   'string'可以找到

     

错误2当前上下文中不存在名称“结果”

2 个答案:

答案 0 :(得分:1)

似乎你正试图从表中获得平衡价值。这样做的方法是

        balance = Convert.ToInt32(df.ExecuteScalar());

GetDouble方法适用于OledbDataReader(DbDataReader)并用作

        OleDbDataReader dr = df.ExecuteReader();
        while (dr.Read())
        {
            double val = dr.GetDouble(0);//ordinal of column
        }

但是我建议你给出正确的命名约定。像'df'这样的名字会导致程序员在调试代码时无处可去

答案 1 :(得分:0)

除了Akshita2gud在查询数据以获取余额时从读者获取双值时所提供的内容,您的更新命令形成不良,即使是内部的,您可以通过将字符串附加到一起来打开SQL注入?当然......

我发现的OleDB命令使用“?”作为放置来自您的活动的参数值的占位符。您有参数字符串,但是根据屏幕上的手动输入构建了字符串。你应该把它作为:

string update = "Update Accounts Set Balance = ? Where acctNO = ?";

参数添加在与上面的SQL-Update相同的序号位置,首先添加了balance字段,然后添加了第二个帐号。如果balance是数字,则不需要围绕它的字符串,因为参数是数字。类似的帐号。如果是string,并且参数是string,则它知道如何处理它。我喜欢为参数名称添加前缀,因此没有任何歧义,认为它知道列名称与您打算进入的内容...因为OleDB查询中没有命名参数。我添加了“p”,分别表示balance和acctno的“参数”。

df.Parameters.AddWithValue("@pBalance", balance);   // balance is already numeric
df.Parameters.AddWithValue("@pAcctNo", AcctDep.Text);   // account # is string

df.ExecuteNonQuery();
dc.Close();

为您的存款和撤销声明应用类似的SQL-Update,并根据需要修复您的数字转换,例如Akshita2gud提议。