2013-02-05 5 views
0

"조건 식에 데이터 형식이 일치하지 않습니다." 한 데이터베이스에서이 코드를 실행할 때 오류가 발생하지만 다른 데이터베이스에서 완벽하게 작동합니다. 관련 테이블을 다른 데이터베이스로 복사하고 그 데이터베이스에서 실행하면 프로그램이 다시 실패합니다!"조건 식의 데이터 형식이 일치하지 않습니다." 오류

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 Project 
{ 
public partial class Login : Form 
{ 
    public Login() 
    { 
     InitializeComponent(); 
    } 

    private void Login_Load(object sender, EventArgs e) 
    { 

    } 

    private void label1_Click(object sender, EventArgs e) 
    { 

    } 

    private void LoginButton_Click(object sender, EventArgs e) 
    { 
     DAL conn = new DAL(@"|DataDirectory|\ProjectDB.accdb"); 
     DataSet ds = conn.GetDataSet("Select * from Secretarys where SecretaryUsername = "+UserNameBox.Text.ToString()); 
     if (ds.Tables[0].Rows[0][0].ToString().Equals(PassowrdBox.Text)) 
      MessageBox.Show("asd","sdfa"); 
    } 
} 
} 

"DAL"클래스를 사용하고 있습니다. 은 OleDb와

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Data; 
using System.Data.OleDb; 

/// <summary> 
/// Summary description for DAL 
/// </summary> 
public class DAL 
{ 
private string dbPath; 
private OleDbConnection conn; 
private OleDbCommand command; 
private OleDbDataAdapter adapter; 
private string stQuery; 

public DAL(string dbPath) 
{ 
    this.dbPath = dbPath; 
    string ConnectionString = string.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}", this.dbPath); 
    conn = new OleDbConnection(ConnectionString); 
    command = new OleDbCommand(stQuery, conn); 
    adapter = new OleDbDataAdapter(command); 
} 

public DataSet GetDataSet(string strSql) 
{ 
    DataSet ds = new DataSet(); 
    command.CommandText = strSql; 
    adapter.SelectCommand = command; 
    adapter.Fill(ds); 
    return ds; 
} 
public bool InsertRow(string sqlInsert) 
{ 
    int rowsEffected; 
    command.CommandText = sqlInsert; 
    conn.Open(); 
    rowsEffected = command.ExecuteNonQuery(); 
    conn.Close(); 
    return (rowsEffected > 0); 

} 

public string GetData(string strSql)//שולפת נתונים מהטבלת המשתמשים שנמצאת באקסס 
{ 
    string st = ""; 
    DataSet ds = new DataSet(); 
    command.CommandText = strSql; 
    conn.Open(); 
    st = command.ExecuteScalar().ToString(); 
    conn.Close(); 
    return (st); 
} 

public void UpdateRow(string sqlInsert)//הוספת נתונים לטבלת החברים באקסס 
{ 

    command.CommandText = sqlInsert; 
    conn.Open(); 
    command.ExecuteNonQuery(); 
    conn.Close(); 

} 
public void DeleteDataSet(DataSet ds) 
{ 

    OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter); 
    adapter.DeleteCommand = builder.GetDeleteCommand(); 
    conn.Open(); 
    adapter.Update(ds); 
    conn.Close(); 
} 
} 

답변

1

(사용하는 것처럼) 기준의 불일치는 일반적으로 데이터베이스가 다른 데이터 유형을 기대하고 있기 때문에 데이터베이스에 넣어하고자하는 데이터를 수용 할 수 없음을 의미합니다. (즉, 데이터베이스가 정수를 기대하고 이중 값을 전달합니다.) 약간 짜증나지만 데이터베이스의 열의 모든 데이터 유형을 다시 확인하여 처리 할 수있는 것을 보내고 있는지 확인해야합니다.

이 경우 ... SecretaryUsername의 데이터베이스 열이 실제로 문자열이 아니겠습니까? 그것은 이상하게 보입니다.하지만 일어난 것으로 알려져 있습니다. 일부 DB 디자이너는 정수가 포함되어 있어도 (자 동 번호와 일치시키기 위해) 필드 이름을 지정합니다. 데이터베이스의 예상 데이터 유형을 반드시 확인해야합니다.

관련 문제