簡體   English   中英

從c#中的數據集中選擇特定數據?

[英]select specific data from dataset in c#?

我正在做我的學校項目。 我使用visual studio's 'Data Set Configuration Wizard'生成了SQL Server Compact版數據庫visual studio's 'Data Set Configuration Wizard'

我有一個名為'User'的表。 我想用“數據集”的“用戶”表填充僅包含符合特定條件的記錄。 但是當我調用'adapter.Fill(ds.User)'時,它會用數據庫表中的所有數據填充表。

我試圖將適配器的'SELECT'命令設置為

userAdapter.Adapter.SelectCommand.CommandText = string.Format("SELECT * FROM User WHERE UserName = {0}", userName);

但這也行不通。 誰能告訴我如何在'adapter'的'SELECT'命令中指定'WHERE'子句?

這是圖像http://s3.postimg.org/4pqb9cwyr/error.png

這里也是代碼

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Student_s_Expense_Manager
{
    public partial class Login : Form
    {
        public Login()
        {
            InitializeComponent();
        }

        private void btnLogin_Click(object sender, EventArgs e)
        {
            // Create 'User' Table Adapter
            ExpenseDataSetTableAdapters.UserTableAdapter userAdapter = new ExpenseDataSetTableAdapters.UserTableAdapter();

            // Create a Dataset of ExpenseDataSet
            ExpenseDataSet expenseDataset = new ExpenseDataSet();

            string userName = textBoxUserName.Text;

            userAdapter.Adapter.SelectCommand.CommandText = string.Format("SELECT * FROM [User] WHERE UserName = '{0}'", userName);
            userAdapter.Fill(expenseDataset.User);
        }
    }
}

類型化數據適配器確實只在調用Fill方法時啟動其SelectCommand 所以不幸的是,你很難用你的方式設置你想要的查詢。 我建議您退出使用向導並掌握機制,但這超出了您的問題的范圍。 不過, 這個鏈接應該是有意義的。

除此之外,您的查詢的實際格式是錯誤的。 如果UserNamevarchar您的比較將期望圍繞您的用戶名值的撇號( ' )。 您還必須確保您的值將使它本身可能包含的任何撇號加倍,以便Sql Server將它們解釋為char而不是分隔符。

userAdapter.Adapter.SelectCommand.CommandText =
    string.Format("SELECT * FROM User WHERE UserName = '{0}'", userName.Replace("'", "''"));

或者更好的是,使用參數來保護您的代碼免受SQL注入攻擊

userAdapter.Adapter.SelectCommand.CommandText =
    "SELECT * FROM User WHERE UserName = @UserName";
userAdapter.Adapter.SelectCommand.Parameters.AddWithValue("@UserName", userName);

嘗試

userAdapter.Adapter.SelectCommand.CommandText = string.Format("SELECT * FROM User WHERE UserName = '{0}'", userName);

你居然忘了加冒號' '周圍的用戶名

您必須在SQL語句中將字符串括在引號中:

userAdapter.Adapter.SelectCommand.CommandText = 
    string.Format("SELECT * FROM User WHERE UserName = '{0}'", userName);

但是,您不應該在實際應用程序中執行此操作。 對於一個學校項目你可以,但你應該養成使用參數的習慣:

userAdapter.Adapter.SelectCommand.CommandText =
    string.Format("SELECT * FROM User WHERE UserName = @UserName");
userAdapter.Adapter.SelectCommand.Parameters.AddWithValue("@UserName",userName);

做一些關於SQL注入的研究,以了解原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM