我正在使用C#和SQL进行练习,我正在尝试制作一个简单的email
+ password
登录来检查数据库匹配输入。
为什么输入错误时此代码为何返回预期的0
,但使用正确的数据却说输入字符串错误?
System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand();
cmd.CommandType = System.Data.CommandType.Text;
cmd.CommandText =
"SELECT UserPassword, UserMail FROM Users WHERE UserPassword = '" +
textBox2.Text +
"' AND UserMail = '" +
textBox1.Text + '\'';
cmd.Connection = sqlConnection1;
sqlConnection1.Open();
int correct = 0;
correct = Convert.ToInt32(cmd.ExecuteScalar());
sqlConnection1.Close();
if(correct <= 0)
{
MessageBox.Show("Wrong input. Correct = " +
Convert.ToString(correct) +
"\n" +
cmd.CommandText);
}
textbox1
和textbox2
分别是电子邮件和密码输入。
我期望“ email5” +“ email5”的输出为5,因为它是第五行(与其他有效数据相同),但是我得到了以下 exception :
>“ System.FormatException”类型的未处理异常发生在 mscorlib.dll
其他信息:输入字符串的格式不正确。
答案 0 :(得分:2)
据我所知,您要检查在import React from 'react'
import * as ReactDOM from 'react-dom';
import { Provider } from 'react-redux'
import { ConnectedRouter } from 'connected-react-router'
import store, { history } from './store'
import App from './containers/app'
import 'bootstrap/dist/css/bootstrap.min.css';
ReactDOM.render(
<Provider store={store}>
<ConnectedRouter history={history}>
<div className="row">
<App />
</div>
</ConnectedRouter>
</Provider>,
document.getElementById('root')
);
表中是否有至少条记录,其中给出了Users
和UserPassword
字段的值;
如果是,则用户通过UserMail
和textBox2.Text
提供的密码和电子邮件为textBox1.Text
。如果是您的情况
correct
答案 1 :(得分:0)
您遇到的错误
“发生了类型为'System.FormatException'的未处理异常 mscorlib.dll
其他信息:输入字符串的格式不正确。”
是因为您正在选择字符串值
cmd.CommandText = "SELECT **UserPassword**, UserMail FROM Users WHERE ....
然后您尝试将其转换为Int
correct = Convert.**ToInt32**(cmd.ExecuteScalar());
ExecuteScalar
执行查询,并返回查询返回的结果集中第一行的第一列。其他列或行将被忽略。
因此,您正在尝试将密码值转换为Int32,这将引发错误...
如果您使用
cmd.CommandText = "SELECT Count(*) FROM Users WHERE ....
您的其余代码将正常工作,因为该条件只是检查是否正确大于0
sqlConnection1.Open();
int correct = 0;
correct = Convert.ToInt32(cmd.ExecuteScalar());
sqlConnection1.Close();
if(correct <= 0)
但是,您必须意识到SQL注入和其他不良做法的风险,但是没有主题