C# 中的多个 SQL 查询将变量作为列返回

2024-04-27

我正在开展一个创建注册系统的学校项目。我选择的数据库方法是使用 T-SQL,因为它是我已经熟悉的东西。

我正在使用下面的代码来查询数据库

    public void button3_Click(object sender, EventArgs e)
    {
        string StudentID = (textBox1.Text);
        string queryDOB = "SELECT DOB,LastName,Degree FROM Student Where StudentID = " + StudentID;

        SqlConnection con = new SqlConnection(Properties.Settings.Default.SRSConnectionString);
        con.Open();

        SqlCommand DOB = new SqlCommand(queryDOB, con);

        SqlDataReader stidreader = DOB.ExecuteReader();

        if (stidreader.Read())
        {
            textBox2.Text = stidreader["DOB"].ToString();
            textBox3.Text = stidreader["LastName"].ToString();
            textBox5.Text = stidreader["Degree"].ToString();
        }
        else
        {
            MessageBox.Show("Your ID is not recognised. Please try again.");
            textBox1.Clear();
            textBox2.Clear();
            textBox3.Clear();
            textBox5.Clear();
        }

        con.Close();
    }

    private void textBox5_TextChanged(object sender, EventArgs e)
    {
        string Degree = textBox5.Text;
        string degsql = "SELECT ModName FROM Module Where Degree = " + Degree;
        SqlConnection con = new SqlConnection(Properties.Settings.Default.SRSConnectionString);
        DataSet dsm = new DataSet();
        SqlDataAdapter connect = new SqlDataAdapter(degsql, con);

        con.Open();

        connect.Fill(dsm);
        this.listBox2.DataSource = dsm.Tables[0];
        this.listBox2.DisplayMember = "ModName";
}

按钮单击的第一部分工作正常,但是当我在下一个事件(文本框更改)中运行查询时,查询返回一条错误消息,指出发现了无效列。好吧,找到的列是应该用于查询的变量,而不是列本身,这非常令人困惑。

我知道 MARS 可能存在问题,但 DB 似乎是正确的版本。

任何人都可以阐明吗?

欣赏它,

Jamie


您的变量名称缺少单引号。将代码更改为以下内容以修复 SQL:

string degsql = "SELECT ModName FROM Module Where Degree = '" + Degree + "'";

或者这看起来稍微好一点:

string degsql = string.Format(
    "SELECT ModName FROM Module Where Degree = '{0}'", 
    Degree);

但是,您不应该这样做,因为它会让您遭受 SQL 注入攻击。阅读这个问题以了解这意味着什么:参数化查询如何帮助防止 SQL 注入? https://stackoverflow.com/questions/5468425/how-do-parameterized-queries-help-against-sql-injection

下面是一些正确执行此操作并避免那些令人讨厌的安全问题的代码:

private void textBox5_TextChanged(object sender, EventArgs e)
{
    string Degree = textBox5.Text;
    string degsql = "SELECT ModName FROM Module Where Degree = @Degree";

    DataSet dsm = new DataSet();

    using(var con = new SqlConnection(Properties.Settings.Default.SRSConnectionString))
    {
        SqlCommand cmd = new SqlCommand(degsql, con);
        // use the appropriate SqlDbType:
        var parameter = new SqlParameter("@Degree", SqlDbType.Varchar);
        parameter.Value = Degree;
        cmd.Parameters.Add(parameter);

        SqlDataAdapter connect = new SqlDataAdapter(cmd);
        connect.Fill(dsm);
    }

    this.listBox2.DataSource = dsm.Tables[0];
    this.listBox2.DisplayMember = "ModName";
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 中的多个 SQL 查询将变量作为列返回 的相关文章

随机推荐

  • 迭代选定节点的 xml 文件

    我有一个名为 image xml 的 xml 文件
  • python pandas 标记如果列中每个值有多个唯一行

    在下面的数据框中 我有三列 Code Category Count X A 89734 X A 239487 Y B 298787 Z B 87980 W C 098454 我需要添加一列 如果一个类别有多个唯一代码 如上例中的 B 它会获
  • 重复 .ajax 调用导致 jQuery 内存泄漏

    我正在使用以下模式 该模式在 Firefox 中会泄漏内存 function function var callee arguments callee ajax url success function setTimeout callee
  • 推送 64 位 intel osx

    我想将 64 位地址压入堆栈 如下所示 asm pushq 0x1122334455667788 但我得到编译错误 我只能按以下方式推送 asm pushq 0x11223344 有人可以帮助我理解我的错误吗 我是装配新手 所以如果我的问题
  • 使 Chrome 即使在 500 或 404 代码上也能显示页面(表现得像 Firefox)

    我们正在 Symfony 中开发一个新网站 当 Symfony 遇到错误 例如 找不到路由 并且 debug 设置为 true 时 它 不仅会输出 404 代码 而且实际上会在页面上显示错误 Firefox 显示服务器返回的内容 但 Chr
  • 在 Django 中使用“.filter().filter().filter()...”有缺点吗?

    以下两个调用是否解析为 Django 中的等效 SQL 查询 链接多个调用 Model objects filter arg1 foo filter arg2 bar 将所有参数包装在一起 Model objects filter arg1
  • Codeigniter 回显 [::1] 而不是 localhost

    我正在使用 CodeIgniter 3 作为 Web 平台 并尝试将语义 UI CSS 导入到我的页面中 我正在使用 CodeIgniter 来做到这一点base url 方法中的hrefCSS 导入的属性 但是 semantic css
  • JSF 2 全局异常处理,导航到错误页面未发生

    我正在开发一个基于 JSF 2 0 的 Web 应用程序 我正在尝试实现一个全局异常处理程序 每当发生任何异常 例如 NullPointerException ServletException ViewExpiredException 等
  • Java HTTPS客户端证书认证

    我对HTTPS SSL TLS我对客户在使用证书进行身份验证时到底应该提供什么内容感到有点困惑 我正在编写一个 Java 客户端 需要执行一个简单的操作POST数据到特定的URL 这部分工作正常 唯一的问题是它应该重新完成HTTPS The
  • Matlab,如何获取imagesc生成的结果?

    我读过一些类似的文章 但它们不是我想要的 得到imagesc之后的矩阵 https stackoverflow com questions 14364239 get the matrix after imagesc 14364434 143
  • 避免实现接口中存在的方法 - java

    我有一个如下所示的界面 public interface a public void m1 public void m2 public void m3 public class A implements a public void m3 i
  • SBT 中的 :、:: 和 / 有什么区别?

    我试图回忆是否是test compile test compile or test compile当我在 SBT 上做一些事情时 我突然意识到 虽然我对使用哪个分隔符做什么有一些直觉 但我对每个分隔符的用途并不清楚 因此 当在 sbt 控制
  • 使用 jQuery 将播放/暂停/结束功能绑定到 HTML5 视频

    我正在尝试绑定play pause and ended使用 jQuery 的事件但有一个问题 当我右键单击视频并选择播放或暂停时 图标会正确更改 当我单击播放按钮时 它会更改为暂停 但如果我单击暂停按钮继续播放视频 它不会更改为再次播放 谁
  • 为什么数组前需要加星号?

    我不知道这是哈希问题还是数组问题 但我不明白为什么第三个示例中需要星号 才能获得填充数据的哈希 如果没有它 它会输出一个空的哈希值 coding utf 8 require pp pp first name Shane last name
  • JavaFX 虚拟键盘不显示

    我是javafx新手 我制作了一个简单的应用程序表单 它有 锚定窗格 Pane 文本域 我在触摸屏设备上运行该应用程序 但虚拟键盘不显示 文本字段已经聚焦 我使用的是 JDK 8u25 场景生成器 2 0 根据我读到的 http docs
  • 增加 SQL 命令的命令超时

    我有一个小问题 希望有人能给我一些建议 我正在运行一个 SQL 命令 但由于数据量很大 该命令似乎需要大约 2 分钟才能返回数据 但默认的连接时间是 30 秒 我如何增加这个时间 并将其应用到这个命令 public static DataT
  • 如何保留操作/标题栏但隐藏通知栏

    如何保留操作 标题栏但隐藏通知栏 这个问题看起来已经得到了回答 但我发现的大多数答案都隐藏了操作栏和通知栏 我希望能够保留操作 标题栏 我得到的最好的方法是隐藏两者并使用线性布局来显示自定义操作 标题栏 但我想要一个系统生成的 另外 是否可
  • 是否可以用 R 编写音乐并播放? (Mac OS X)[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想知道是否有一种方法可以用 r 编写脚本来创作音乐 就像编码程序 SuperCollider 或编码
  • 求解序言中极其简单的方程:A = B + C?

    我有一个非常简单的方程 我希望能够在序言中求解 A B C 我希望能够编写一个谓词来表达这种关系 它可以处理任何一个未实例化的参数 无需推广到更复杂的关系或方程 myEquation A B C something 我可以使用以下语义进行调
  • C# 中的多个 SQL 查询将变量作为列返回

    我正在开展一个创建注册系统的学校项目 我选择的数据库方法是使用 T SQL 因为它是我已经熟悉的东西 我正在使用下面的代码来查询数据库 public void button3 Click object sender EventArgs e