Visual Studio 2008 및 SQL Server 2008로 작업하고 있으며 테이블이 있습니다.
bookdat
이 열과 함께 :
title varchar(200), author varchar(100), publication varchar(200),
accno varchar(200) not null primary key, price int, quantity int
이제 Visual Studio에서 사용자는 하나의 열 (확인란에서)을 사용하여 데이터를 검색하고 텍스트 상자에 값을 입력하여 데이터베이스 테이블에서 해당 데이터를 찾을 수있는 검색 데이터베이스 기능을 만들고 있습니다.
이 기능은 내가 accno, 가격 및 수량을 검색 할 때 잘 작동합니다. 그러나 제목, 저자, 출판물을 검색 할 때 예외가 발생합니다.
심지어 pyzwyz를 사용하여 값을 string 또는 int로 변환하려고 시도했습니다. 등) 작동하지 않습니다.내 C # 코드는 여기에 있습니다 (b/w
convert.tostring
를 선언했습니다)
SqlConnection con
그리고
SqlCommand
공개 클래스 형태로) :
SqlDataAdapter
private void button3_Click(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(comboBox2.Text) && !string.IsNullOrEmpty(textBox8.Text))
{
cmd = new SqlCommand("SELECT * FROM bookdat WHERE title=@fdata OR author=@fdata OR publication=@fdata OR accno=@fdata OR price=@fdata OR quantity=@fdata", con);
if (comboBox2.SelectedIndex == 0)
cmd.Parameters.AddWithValue("@fdata", textBox8.Text);
else if (comboBox2.SelectedIndex == 1)
cmd.Parameters.AddWithValue("@fdata", textBox8.Text);
else if (comboBox2.SelectedIndex == 2)
cmd.Parameters.AddWithValue("@fdata", textBox8.Text);
else if (comboBox2.SelectedIndex == 3)
cmd.Parameters.AddWithValue("@fdata", textBox8.Text);
else if (comboBox2.SelectedIndex == 4)
cmd.Parameters.AddWithValue("@fdata", textBox8.Text);
else if (comboBox2.SelectedIndex == 5)
cmd.Parameters.AddWithValue("@fdata", textBox8.Text);
da = new SqlDataAdapter(cmd);
try
{
DataTable dt = new DataTable();
con.Open();
da.Fill(dt);
cmd.ExecuteNonQuery();
dataGridView2.DataSource = dt;
con.Close();
if (dt.Rows.Count> 0)
{
MessageBox.Show("Record Found!!");
comboBox2.Text = "";
textBox8.Text = "";
}
else
{
MessageBox.Show("No Records Found!!");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
else
{
MessageBox.Show("Please Fill The Required Fields To Find Data !!");
}
}
- 답변 # 1
- 답변 # 2
실수는 다음과 같은 줄에 있습니다 :
cmd.Parameters.AddWithValue("@fdata", textBox8.Text);
암시 적 변환이 실패하므로 int로 변환
cmd.Parameters.AddWithValue("@fdata", Convert.ToInt32(textBox8.Text));
textBox8에 텍스트가 있는지 확인해야합니다.
어쨌든 해결하기가 훨씬 쉬운 작업을 수행하기 위해 많은 논리를 갖고있는 것 같습니다.
와이즈 비즈 예를 들어 statement는 훨씬 더 깨끗할 수 있습니다.
if
- 답변 # 3
여기서는 테이블 구조 나 세부 사항을 잘 모르지만 여기에 어떻게 접근해야하는지에 대한 추측이 여전히 많습니다.
첫 번째 단계는 다양한 열을 기반으로 bookdat에서 데이터를 찾을 수있는 저장 프로 시저를 만드는 것입니다. 이와 같은 것이 작동해야합니다. RECOMPILE 옵션을 확인하십시오. 이것이 중요한 이유에 대한 자세한 내용은 원래 의견의 기사를 참조하십시오.
if (comboBox2.SelectedIndex == 0 || comboBox2.SelectedIndex == 1 || comboBox2.SelectedIndex == 2 || comboBox2.SelectedIndex == 3 || comboBox2.SelectedIndex == 4 || comboBox2.SelectedIndex == 5) { cmd.Parameters.AddWithValue("@fdata", textBox8.Text); }
이제 데이터베이스에서 데이터를 검색 할 수있는 방법이 있으므로 dotnet 코드를 설정해야합니다. USING 명세서를 사용하고 있습니다. 이것은 IDisposable 인터페이스를 상속하는 객체에서 수행해야하는 작업입니다. 범위를 벗어난 객체는 항상 올바르게 처리되도록합니다. 데이터베이스 연결에 매우 중요합니다. 그렇지 않으면 연결 풀에 과부하가 걸립니다.
특히 언어를 배우는 것처럼 보이므로 실제로 의미가있는 객체 이름을 사용합니다. 기본 번호가 지정된 이름 만 사용하는 것은 좋지 않습니다. 앞으로 코드를 유지해야 할 때는 이름이 아무 의미가없는 텍스트 상자가 무엇인지 기억하려고 노력하게 될 것입니다.
create procedure bookdat_Search ( @title varchar(50) , @author varchar(50) , @publication varchar(50) , @accno int , @price int , @quantity int ) WITH RECOMPILE as begin set nocount on; SELECT * --explicitly name columns here, not all columns in the table. FROM bookdat b WHERE title = coalesce(@title, b.title) OR author = coalesce(@author, b.author) OR publication = coalesce(@publication, b.publication) OR accno = coalesce(@accno, b.accno) OR price = coalesce(@price, b.price) OR quantity = coalesce(@quantity, b.quantity) end
private void button3_Click(object sender, EventArgs e) { try { if (string.IsNullOrEmpty(comboBox2.Text) || string.IsNullOrEmpty(textBox8.Text)) { MessageBox.Show("Please Fill The Required Fields To Find Data !!"); } else { using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["YourConnectionString"].ConnectionString)) { conn.Open(); using (SqlCommand cmd = new SqlCommand("bookdat_Search", conn)) { cmd.CommandType = System.Data.CommandType.StoredProcedure; switch (comboBox2.SelectedIndex) { case 1: cmd.Parameters.Add("@title", SqlDbType.VarChar, 50).Value = textBox8.Text; break; case 2: cmd.Parameters.Add("@author", SqlDbType.VarChar, 50).Value = textBox8.Text; break; case 3: cmd.Parameters.Add("@publication", SqlDbType.VarChar, 50).Value = textBox8.Text; break; case 4: cmd.Parameters.Add("@accno", SqlDbType.Int).Value = int.Parse(textBox8.Text); break; case 5: cmd.Parameters.Add("@price", SqlDbType.Int).Value = int.Parse(textBox8.Text); break; case 6: cmd.Parameters.Add("@quantity", SqlDbType.Int).Value = int.Parse(textBox8.Text); break; } using (SqlDataReader reader = cmd.ExecuteReader()) { if (reader.Read()) { MessageBox.Show("Record Found!!"); } else { MessageBox.Show("No Record Found!!"); } } } } } } catch (Exception ex) { MessageBox.Show(ex.ToString()); } }
관련 자료
- java - nvarchar 값 '2018-10-03'을 데이터 형식 int로 변환 할 때 SQL Server 예외가 실패했습니다
- sql - nopcommerce 43에서 nvarchar 값 'abc'를 데이터 유형 int로 변환 할 때 변환에 실패했습니다
- sql - nvarchar 값 '$28,92625'를 데이터 형식 int로 변환 할 때 변환에 실패했습니다
- sql server - orghibernateexceptionsqlgrammarexception - nvarchar 값 'viewwebapp'을 데이터 유형 int로 변환 할 때 변환 실패
- sql server - sql - 문자열에서 날짜 및/또는 시간을 변환 할 때 변환에 실패했습니다
- asp.net - varchar를 데이터 유형 int로 변환 할 때 변환에 실패했습니다 - sql
- sql - varchar 값 'Collect_Date'를 데이터 유형 int로 변환 할 때 변환에 실패했습니다
- sql - 오류 메시지 241을 피하는 방법 (문자열에서 날짜 및/또는 시간을 변환 할 때 변환에 실패 함)
- sql - 문자열에서 날짜 및/또는 시간을 변환 할 때 변환에 실패했습니다 삽입을 시도하는 동안
- tsql - 문자열에서 날짜를 변환 할 때 변환에 실패했습니다
- c++ - 문자열을 json으로 변환하여 생성 된 예외를 어떻게 해결합니까?
- dart - flutter http exception이 발생했습니다 _exception (예외 - 데이터로드 실패)
- ion - android 치명적인 예외 - javalangnoclassdeffounderror : 실패한 분석 : lorg/apache/http/requestline;
- c# - "데이터 형식 nvarchar를 실수로 변환하는 동안 오류가 발생했습니다"라는 오류가 발생합니다
- android - 설레다에서 예외로 빌드 실패
- sql - nvarchar 데이터 형식을 숫자로 변환하는 중 오류가 발생했지만 이유를 모르겠습니다
- sql - mysql 날짜 변환은 특정 달을 변환하는 null을 반환합니다
- php - 포착되지 않은 예외 - datetime :: __ construct () : 시간 문자열을 구문 분석하지 못했습니다
- android - 데모 앱 빌드에 실패했습니다 예외를 해결하는 방법?
- sql - GETDATE () 함수가 "문자열을 smalldatetime 데이터 유형으로 변환 할 때 변환 실패"오류를 반환합니다
- c# : Dapper 또는 System.Data가 일부 데이터베이스의 단순 선택 쿼리에 대해 올바른 결과를 반환하지 않는 경우가 있습니다 (SQL Server 2012 및 2019).
- java : jdbc.SQLServerException : 모든 사용자의 로그인에 실패했습니다.
- c# : comboBox에서 데이터를 검색하는 쿼리를 만드는 데 문제가 있습니다.
- c# : 엔터티 프레임 워크, 마지막 ID를 참조하는 외래 키가 삽입되었으며 동일한 테이블에있는 유사 항목 모음도 삽입되었습니다.
- Windows Server 2008에서 SQL Server Express를 제거하려면 어떻게해야합니까?
- SQL 서버 변경 권한
- c# : 저장 프로 시저를 구문 분석하는 방법은 무엇입니까?
- c#을 사용하여 SQL 쿼리에서 레code를 검색 할 수 없습니다.
- sql : '모든'문자열을 저장할 때 대문자로 변환하는 방법이 있습니까?
- SQL 스토어드 프로 시저의 컨텐츠가 임시 테이블에 포함 된 함수 이름을 사용하는 스토어드 프로 시저 세부 사항 표시