0

アクセス層:

public bool AddStudent(string busStudentFullName, string busStudentFatherName)
{
    con = new SqlCeConnection();
    con.ConnectionString = "data source = C:\\Users\\hasni\\Documents\\Visual Studio 2010\\Projects\\UniversityManagementSystem\\UniversityManagementSystem\\UniversityDB.sdf";
    con.Open();

    ds1 = new DataSet();
    //DataTable t = new DataTable();
    // string sql = "SELECT * from AdminPassword where Admin Name ='" + AdminNameLogintextBox.Text + "' and Password='" + PasswordLogintextBox.Text + "'";
    //string qry = "SELECT * FROM Students";

    // string sql = "SELECT * from AdminPassword where Admin Name ='" + AdminNameLogintextBox.Text + "' and Password='" + PasswordLogintextBox.Text + "'";
    string sql = "SELECT * FROM Students";


    da = new SqlCeDataAdapter(sql, con);
    //da = new SqlCeDataAdapter();

    //DataTable t = new DataTable();
    //da.Fill(t);
    da.Fill(ds1, "Students");


    //string userNameDB = Convert.ToString(ds1.Tables[0]);
    // return userNameDB;

    con.Close();
   // string busStudentFullName;
    //string busStudentFatherName;
    string sql2 = "INSERT INTO Students (Student Full Name,Student Father Name) Values('"+ busStudentFullName + "','" + busStudentFatherName + "')";


    da = new SqlCeDataAdapter(sql2, con);
    da.Fill(ds1, "Students");

    con.Close();
    return true;

}

ビジネス層:

public bool getResponseForAddStudent(string studentName, string studentfathername)
{
    bool var = access.AddStudent(studentName, studentfathername);
    return var;
}

プレゼンテーション層:

private void AddStudentButton_Click(object sender, EventArgs e)
{
    string studentName = StudentNameBox.Text;
    string studentfathername = StdFatherNameBox.Text;

    bool var = _busGeneral.getResponseForLogin(studentName, studentfathername);

    if (var)
    {
        MessageBox.Show("Student Added");
    }
    else 
    {
        MessageBox.Show("Sorry");
    }
}
4

2 に答える 2

0

あなたが何をしようとしているのか理解できれば、ブラケットの問題に加えて、あなたのコードには多くの問題があります。

まず、最後の DataAdapter.Fill 操作を実行する前に接続を閉じています。また、DataAdapter に学生データを (再) 埋め込む前にレコードを挿入する必要があるため、最初に SqlCeCommand オブジェクトを使用して ExecuteNonQuery ステートメントを発行する必要があります。また、インジェクション攻撃やその他の問題を回避するために、常にパラメーター化されたクエリを使用する必要があります。エラーを処理するために、コードを try...catch でラップすることもお勧めします。

挿入操作で達成しようとしていると思われるものを次に示します(構文を机上で確認しただけです):

//    con.Close(); 
// string busStudentFullName;
SqlCeCommand cmd = db.CreateCommand();
cmd.CommandText = "INSERT INTO Students ([Student Full Name],[Student Father Name]) Values(@FullName, @DadsName)";
cmd.AddParameter("@FullName", busStudentFullName);
cmd.AddParameter("@DadsName", busStudentFatherName);
cmd.ExecuteNonQuery();

この時点で、新しく挿入されたものを含む学生の行で DataAdapter を埋めることができます。

于 2013-05-13T22:46:54.067 に答える
0

列の名前にスペースが含まれている場合、Sql は無効です。角かっこで囲む必要があります。
INSERT INTO Students (Student Full Name,Student Father Name)
代わりに
INSERT INTO Students ([Student Full Name],[Student Father Name])

于 2013-05-13T22:13:24.967 に答える