输入流格式不正确

时间:2015-11-12 00:57:48

标签: c# sql

我在这一行得到错误 account = int.Parse(cmd.ExecuteScalar()。ToString()); //错误 每次我试图运行这个程序。它给了我同样的错误。账号是一个整数,值来自文本框1.账户持有人姓名来自文本框2。这是一个SQL事务方法。当我点击按钮时,我希望增加余额或减少余额。这是我想要做的事情。我不是很专业,我想学习。请重播我,以便我能纠正这个错误.Thnaks

Here is my C# code . But when i run this application its shows following errors.Input stream not in correct format


        namespace BANKINHNTIRE1
        {
            public partial class Form3 : Form
            {
                public Form3()
                {
                    InitializeComponent();
            }

            private void button1_Click(object sender, EventArgs e)

            {
                int account = System.Convert.ToInt32(textBox1.Text);
                string sql = "select statementamount from ACCOUNT WHERE Account_Number ='" + textBox1.Text + "'";

                SqlConnection cn = new SqlConnection(@"Data Source=KHUNDOKARNIRJOR\KHUNDOKERNIRJOR;Initial Catalog=Login;Integrated Security=True");
                SqlCommand cmd = new SqlCommand(sql, cn);
                cn.Open();
               account = int.Parse(cmd.ExecuteScalar().ToString());

                if (account > 0)
                {
                    int j;

                    SqlTransaction trans;
                    SqlCommand cmd1 = new SqlCommand();
                    trans = cn.BeginTransaction();
                    cmd1.Connection = cn;
                    cmd1.Transaction = trans;
                    cmd1.CommandType = CommandType.Text;

                    cmd1.CommandText = "update ACCOUNT set statementamount=statementamount+'" + textBox3.Text + "' where Account_Number ='" + textBox1.Text + "'  and First_Name='" + textBox2.Text + "'";

                    j = cmd1.ExecuteNonQuery();
                    if (j == 1)
                    {
                        trans.Commit();
                        MessageBox.Show("credited...");

                    }
                    else
                        trans.Rollback();


                }
                else
                {
                    MessageBox.Show("u can't make credit...");
                }

            }
        }
    }

4 个答案:

答案 0 :(得分:2)

首先我要检查的是您尝试使用{{1转换statementamount(几乎肯定是浮点值)的原因}}

您还将其放入变量int.parse(),尽管它 不是帐号,因此可能是您错误地将accountaccount混为一谈,在这种情况下它可能会更好:

amount

在任何情况下,如果你可以从它们中恢复,你真的应该捕获异常,这肯定是你可以这样做的例子(例如,通过建立错误对话框然后不尝试进一步处理事务)

除此之外,您可以将语句分解为组件,以便更具体地确定问题的发生位置:

double amount = Double.Parse(cmd.ExecuteScalar().ToString());
if (amount > 0) ...

单步执行并检查变量应该有助于明确实际问题是什么。

答案 1 :(得分:1)

如果输入无法解析为整数,

function onOpen() { SpreadsheetApp.getUi().createMenu("CD Report") .addItem("Agreement Report", "agreementReport") .addToUi(); } function agreementReport(){ var as = SpreadsheetApp.getActive(); var sheet = as.getSheetByName("15-16 1:1 agreement"); var handedIn = sheet.getSheetValues(2, 1, sheet.getLastRow(), 1); var stuNames = sheet.getSheetValues(2, 3, sheet.getLastRow(), 1); var list = []; for (i in stuNames){ var curName = stuNames[i][0]; var exists = false; for (j in handedIn){ var curCheck = handedIn[j][0]; if (curCheck == curName){ exists = true; break; } } // end for j if (exists == false){ list.push([curName]); } } // end for i sheet.getRange(2, 5, list.length, 1).setValues(list); } // end agreementReport 将抛出异常。如果您确定输入看起来像数字,则应该只使用此方法。我猜你的select语句没有返回导致错误的任何内容。

您应该使用int.Parse,如果解析有效,则返回true。一些示例代码将是

int.TryParse()

答案 2 :(得分:0)

你试过int.tryparse吗?或者您是否检查cmd.ExecuteScalar是否返回空值。您没有提供确切的错误,所以我只是在猜测。试试这个:

int num1 = 0;
//Check whether cm.ExecuteScalar was null, if yes then use empty string
var sqlResult = cmd.ExecuteScalar() ?? "";
//Next Try parse it to int, if it failed then return 0, you may also return null to determine that you have no records  at all.
account = int.TryParse(sqlResult .ToString(), out num1) ? num1 : 0;

答案 3 :(得分:0)

您应该使用int.Parse(),或者可以将其放在try{} catch{}下以验证传递的值。

int account = 0;
try
{
    account = int.Parse(textBox1.Text.Trim());
}
 catch(Exemption emp)
{
   account=0; // or any default value
   MessageBox.Show(emp.Message);
}

此外,您可以通过在帐户上添加断点来逐行检查。然后按F11调试它。