c# - Oracle 选择查询是 C# 中的无效数字
问题描述
我有一个用于登录的代码。我使用一种方法调用从文本框中获取的数据,并使用数据库中的选择查询检查记录。
当我按下按钮时,我会调用相关方法。
private void btnGiris_Click(object sender, EventArgs e)
{
LoginBilgiler lb = new LoginBilgiler();
bool sonuc = lb.GirisKontrol(txtAd.Text, txtSifre.Text);
}
但是我在下面的 cmd.ExecuteReader 中遇到错误。
public bool GirisKontrol(string ad,string sifre)
{
using (OracleConnection con = new OracleConnection(connectionString))
{
string query = String.Format("SELECT count(*) from Z_LABEL_USER where USERNAME=({0}) and PASSWORD=({1})", ad,sifre);
OracleCommand cmd = new OracleCommand(query, con);
con.Open();
OracleDataReader dr = cmd.ExecuteReader();
if (dr.HasRows)
{
kAdi = ad;
con.Close();
return true;
}
else
con.Close();
return false;
}
}
我用于选择查询的表。
Oracle.ManagedDataAccess.Client.OracleException: 'ORA-01722: 无效号码'
解决方案
请不要在 SQL 中硬编码参数;改为参数化它:
public bool GirisKontrol(string ad, string sifre) {
//DONE: validate public methods' input
if (string.IsNullOrEmpty(ad))
return false; // or throw exception
else if (string.IsNullOrEmpty(sifre))
return false; // or throw exception
using (OracleConnection con = new OracleConnection(connectionString)) {
con.Open();
//DONE: no need to count all the entires, just check if there's at least one
//DONE: keep query readable
//DONE: paramterize queries
string query =
@"select 1
from Z_LABEL_USER
where USERNAME = :prm_UserName
and PASSWORD = :prm_Password";
using (OracleCommand cmd = new OracleCommand(query, con)) {
//TODO: this syntax can vary from library to library you use to work with Oracle
cmd.Parameters.Add(":prm_UserName", OracleType.VarChar).Value = ad;
cmd.Parameters.Add(":prm_Password", OracleType.VarChar).Value = sifre;
using (OracleDataReader dr = cmd.ExecuteReader()) {
if (dr.Read()) {
//TODO: Side effect : it changes instance's state. Do you really want it?
kAdi = ad;
return true;
}
}
}
}
return false;
}
推荐阅读
- google-api - Google 同意屏幕上预先勾选的复选框
- flutter - 如何在颤动中创建嵌套的复选框图块?
- django - 在 django 中的文档 pdf 多页中生成一个 html 页面
- pip - 无法从 Dockerfile 构建 kubespray 容器
- r - 有没有办法专门使用 SIBER 包中的 maxLikOverlap 函数来计算 SEAc?
- racket - 如何获取特定结构的所有实例的列表
- java - Java Spring Hibernate 没有根据我的实体创建表
- google-apps-script - 当工作表名称以 X google apps script 开头时循环遍历脚本
- c# - Linq - 如何使用 Select then Where 但选择整个实体?
- c++ - 我找不到任何会导致此结果的错误