我在这一行得到错误 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...");
}
}
}
}
答案 0 :(得分:2)
首先我要检查的是您尝试使用{{1转换statementamount
(几乎肯定是浮点值)的原因}}
您还将其放入变量int.parse()
,尽管它 不是帐号,因此可能是您错误地将account
和account
混为一谈,在这种情况下它可能会更好:
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调试它。