C#의 SQL Server 데이터베이스에서 데이터를 검색하는 방법은 무엇입니까?
3개의 열이 있는 데이터베이스 테이블이 있습니다.firstname
,Lastname
그리고.age
C# Windows 응용 프로그램에는 3개의 텍스트 상자가 있습니다.textbox1
다음 코드를 사용하여 SQL Server에 연결했습니다.
SqlConnection con = new SqlConnection("Data Source = .;
Initial Catalog = domain;
Integrated Security = True");
con.Open();
SqlCommand cmd = new SqlCommand("Select * from tablename", con);
데이터베이스에서 값을 가져오려고 합니다. 값을 지정할 경우textbox1
데이터베이스의 값과 일치하고 다른 세부 정보를 해당 텍스트 상자로 검색해야 합니다.
이 방법을 사용해 보았지만 작동하지 않습니다.
cmd.CommandText = "select * from tablename where firstname = '" + textBox1.Text + "' ";
텍스트 상자에 다른 모든 값을 검색하려면 어떻게 해야 합니까?
public Person SomeMethod(string fName)
{
var con = ConfigurationManager.ConnectionStrings["Yourconnection"].ToString();
Person matchingPerson = new Person();
using (SqlConnection myConnection = new SqlConnection(con))
{
string oString = "Select * from Employees where FirstName=@fName";
SqlCommand oCmd = new SqlCommand(oString, myConnection);
oCmd.Parameters.AddWithValue("@Fname", fName);
myConnection.Open();
using (SqlDataReader oReader = oCmd.ExecuteReader())
{
while (oReader.Read())
{
matchingPerson.firstName = oReader["FirstName"].ToString();
matchingPerson.lastName = oReader["LastName"].ToString();
}
myConnection.Close();
}
}
return matchingPerson;
}
여기서 주의해야 할 몇 가지 사항: 매개 변수화된 쿼리를 사용하여 코드를 더 안전하게 만듭니다.다음을 사용하여 선택 문을 만드는 방법"where x = "+ Textbox.Text +""
part를 누르면 SQL 주입이 열립니다.
다음으로 변경했습니다.
"Select * from Employees where FirstName=@fName"
oCmd.Parameters.AddWithValue("@fname", fName);
그래서 이 코드 블록이 할 일은 다음과 같습니다.
데이터베이스에 대해 SQL 문을 실행하여 제공한 이름과 일치하는 이름이 있는지 확인합니다.이 경우 해당 사용자는 사용자 개체에 저장됩니다(클래스에 대한 답변 아래 참조).일치하는 항목이 없는 경우 사용자 개체의 속성은 다음과 같습니다.null
.
분명히 저는 당신이 무엇을 하려고 하는지 정확히 알지 못하므로 다음과 같이 주의해야 할 몇 가지 사항이 있습니다.이름이 일치하는 사용자가 둘 이상일 경우 마지막 사용자만 저장되어 사용자에게 반환됩니다.이 데이터를 저장할 수 있도록 하려면 데이터를 다음에 추가할 수 있습니다.List<Person>
.
사용자 클래스를 통해 보다 깨끗하게 청소:
public class Person
{
public string firstName { get; set; }
public string lastName { get; set; }
}
이제 메소드를 호출합니다.
Person x = SomeMethod("John");
그런 다음 다음과 같이 사용자 개체에서 가져온 값으로 텍스트 상자를 채울 수 있습니다.
txtLastName.Text = x.LastName;
DbManager라는 클래스를 만듭니다.
Class DbManager
{
SqlConnection connection;
SqlCommand command;
public DbManager()
{
connection = new SqlConnection();
connection.ConnectionString = @"Data Source=. \SQLEXPRESS;AttachDbFilename=|DataDirectory|DatabaseName.mdf;Integrated Security=True;User Instance=True";
command = new SqlCommand();
command.Connection = connection;
command.CommandType = CommandType.Text;
} // constructor
public bool GetUsersData(ref string lastname, ref string firstname, ref string age)
{
bool returnvalue = false;
try
{
command.CommandText = "select * from TableName where firstname=@firstname and lastname=@lastname";
command.Parameters.Add("firstname",SqlDbType.VarChar).Value = firstname;
command.Parameters.Add("lastname",SqlDbType.VarChar).Value = lastname;
connection.Open();
SqlDataReader reader= command.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
lastname = reader.GetString(1);
firstname = reader.GetString(2);
age = reader.GetString(3);
}
}
returnvalue = true;
}
catch
{ }
finally
{
connection.Close();
}
return returnvalue;
}
그런 다음 양식에서 검색 단추(예: gbtnretrieve)를 두 번 클릭하고 다음 코드를 삽입합니다.
private void btnretrieve_Click(object sender, EventArgs e)
{
try
{
string lastname = null;
string firstname = null;
string age = null;
DbManager db = new DbManager();
bool status = db.GetUsersData(ref surname, ref firstname, ref age);
if (status)
{
txtlastname.Text = surname;
txtfirstname.Text = firstname;
txtAge.Text = age;
}
}
catch
{
}
}
데이터베이스에서 데이터 검색하기
private SqlConnection Conn;
private void CreateConnection()
{
string ConnStr = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString;
Conn = new SqlConnection(ConnStr);
}
public DataTable getData()
{
CreateConnection();
string SqlString = "SELECT * FROM TableName WHERE SomeID = @SomeID;";
SqlDataAdapter sda = new SqlDataAdapter(SqlString, Conn);
DataTable dt = new DataTable();
try
{
Conn.Open();
sda.Fill(dt);
}
catch (SqlException se)
{
throw;
}
catch (Exception ex)
{
throw;
}
finally
{
Conn.Close();
}
return dt;
}
연결을 설정한 후 다음과 같은 간단한 방법을 사용할 수 있습니다.
private void getAgentInfo(string key)//"key" is your search paramter inside database
{
con.Open();
string sqlquery = "SELECT * FROM TableName WHERE firstname = @fName";
SqlCommand command = new SqlCommand(sqlquery, con);
SqlDataReader sReader;
command.Parameters.Clear();
command.Parameters.AddWithValue("@fName", key);
sReader = command.ExecuteReader();
while (sReader.Read())
{
textBoxLastName.Text = sReader["Lastname"].ToString(); //SqlDataReader
//["LastName"] the name of your column you want to retrieve from DB
textBoxAge.Text = sReader["age"].ToString();
//["age"] another column you want to retrieve
}
con.Close();
}
이제 다음과 같이 textBoxFirstName으로 이 메서드의 키를 전달할 수 있습니다.
getAgentInfo(textBoxFirstName.Text);
우리는 이런 종류의 스니펫을 사용할 수 있습니다. 또한 우리는 일반적으로 DB to API 필드에 대한 데이터를 테스트하고 검증하기 위해 이런 종류의 코드를 사용합니다.
class Db
{
private readonly static string ConnectionString =
ConfigurationManager.ConnectionStrings
["DbConnectionString"].ConnectionString;
public static List<string> GetValuesFromDB(string LocationCode)
{
List<string> ValuesFromDB = new List<string>();
string LocationqueryString = "select BELocationCode,CityLocation,CityLocationDescription,CountryCode,CountryDescription " +
$"from [CustomerLocations] where LocationCode='{LocationCode}';";
using (SqlConnection Locationconnection =
new SqlConnection(ConnectionString))
{
SqlCommand command = new SqlCommand(LocationqueryString, Locationconnection);
try
{
Locationconnection.Open();
SqlDataReader Locationreader = command.ExecuteReader();
while (Locationreader.Read())
{
for (int i = 0; i <= Locationreader.FieldCount - 1; i++)
{
ValuesFromDB.Add(Locationreader[i].ToString());
}
}
Locationreader.Close();
return ValuesFromDB;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
throw;
}
}
}
}
이것이 도움이 되기를 바랍니다.
참고: 연결 문자열이 필요합니다("DbConnectionString"의 경우).
DataTable formerSlidesData = new DataTable();
DformerSlidesData = searchAndFilterService.SearchSlideById(ids[i]);
if (formerSlidesData.Rows.Count > 0)
{
DataRow rowa = formerSlidesData.Rows[0];
cabinet = Convert.ToInt32(rowa["cabinet"]);
box = Convert.ToInt32(rowa["box"]);
drawer = Convert.ToInt32(rowa["drawer"]);
}
언급URL : https://stackoverflow.com/questions/14171794/how-to-retrieve-data-from-a-sql-server-database-in-c
'programing' 카테고리의 다른 글
파워셸을 사용하여 바로 가기(.lnk) 파일의 대상 가져오기 (0) | 2023.08.21 |
---|---|
PowerShell을 사용하여 클래스를 작성할 수 있습니까? (0) | 2023.08.21 |
스위프트 배열에서 모든 영 요소를 제거하려면 어떻게 해야 합니까? (0) | 2023.08.16 |
사용자가 필드를 비활성화하지 않고 텍스트 필드를 입력하지 못하도록 하는 방법은 무엇입니까? (0) | 2023.08.16 |
전체 어레이를 덤프하는 중: console.log 및 console.dir 출력 "...더 많은 항목 수]" (0) | 2023.08.16 |