[英]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
。 所以不幸的是,你很難用你的方式設置你想要的查詢。 我建議您退出使用向導並掌握ado.net機制,但這超出了您的問題的范圍。 不過, 這個鏈接應該是有意義的。
除此之外,您的查詢的實際格式是錯誤的。 如果UserName
是varchar
您的比較將期望圍繞您的用戶名值的撇號( '
)。 您還必須確保您的值將使它本身可能包含的任何撇號加倍,以便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.