2016-09-10 14 views
0

2つのテーブルがあり、最初のテーブルはCourseであり、このテーブルには3つのカラムが含まれています。Course_ID,Name_of_courseDeptID;第2のテーブルはDepartmentであり、3つのカラムDeptID,DepName,Collegeを有する。asp.net内の2つのSQL Serverテーブルにデータを挿入する方法

私は追加するデータを表示するためにGridViewを配置します。しかし、両方のテーブルにデータを挿入するコマンドを記述すると、データは追加されません。私は、このコマンドを使用

protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    try 
    { 
     GridViewRow r = GridView1.SelectedRow; 

     Dbclass db = new Dbclass(); 
     string s = ""; 

     DataTable dt = db.getTable(s); 
     ddcollege.SelectedValue = dt.Rows[0]["College"].ToString(); 
     dddept.SelectedValue = dt.Rows[1]["DepName"].ToString(); 
     tbid.Text = r.Cells[0].Text; 
     tbcourse_name.Text = r.Cells[1].Text; 
     lblid.Text = tbid.Text; 
     lberr.Text = ""; 
    } 
    catch (Exception ex) 
    { 
     lberr.Text = ex.Message; 
    } 
} 

protected void btadd_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     if (tbid.Text == "") 
     { 
       lberr.Text = "Please input course id"; 
       return; 
     } 

     if (tbcourse_name.Text == "") 
     { 
       lberr.Text = "Please input course name"; 
       return; 
     } 

     string s = "Insert into Course(Course_ID,Name_of_course) values ('" + tbid.Text + "','" + tbcourse_name.Text + "')"; 

     s = "INSERT INTO Department (DepName,College,DeptID) VALUES ('"+dddept.SelectedValue+"','"+ddcollege.SelectedValue+"','"+tbdeptID.Text+"')"; 
     Dbclass db = new Dbclass(); 

     if (db.Run(s)) 
     { 
       lberr.Text = "The data is added"; 
       lblid.Text = tbid.Text; 
     } 
     else 
     { 
       lberr.Text = "The data is not added"; 
     } 

     SqlDataSource1.DataBind(); 
     GridView1.DataBind(); 
    } 
    catch (Exception ex) 
    { 
      lberr.Text = ex.Message; 
    } 
} 

ここDbclassコードは次のとおりです。

public class Dbclass 
{ 
    SqlConnection dbconn = new SqlConnection(); 

    public Dbclass() 
    { 
     try 
     { 
      dbconn.ConnectionString = @"Data Source=Fingerprint.mssql.somee.com;Initial Catalog=fingerprint;Persist Security Info=True;User ID=Fingerprint_SQLLogin_1;Password=********"; 
      dbconn.Open(); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 
    } 

    //----- run insert, delete and update 
    public bool Run(String sql) 
    { 
     bool done= false; 

     try 
     { 
      SqlCommand cmd = new SqlCommand(sql,dbconn); 
      cmd.ExecuteNonQuery(); 
      done= true; 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 
     return done; 
    } 

    //----- run insert, delete and update 
    public DataTable getTable(String sql) 
    { 
     DataTable done = null; 

     try 
     { 
       SqlDataAdapter da = new SqlDataAdapter(sql, dbconn); 
       DataSet ds = new DataSet(); 
       da.Fill(ds); 
       return ds.Tables[0]; 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 

     return done; 
    } 
} 

は、私が見ることができるすべての

+0

ロジックは内部にあります。*** Dbclass ***;それを見ることなく伝えるのは難しいです。 – Win

+2

まずはSQLインジェクションを避けてください!パラメーター化されたクエリを使用します。 – RajeeshMenoth

答えて

1

主なものは、あなたがあなたの「S」の変数への2つの異なるものを割り当てるですありがとう。この時点で

db.Run(S)の値は、あなたが「S」に割り当てられ

てみてください「部門などに挿入」とあなたが最初のSQL文字列を失ったです:

string s = "Insert into Course(Course_ID,Name_of_course) values ('" + tbid.Text + "','" + tbcourse_name.Text + "')"; 
     s += "INSERT INTO Department (DepName,College,DeptID) VALUES ('"+dddept.SelectedValue+"','"+ddcollege.SelectedValue+"','"+tbdeptID.Text+"')"; 

お知らせ連結(+ =)。上記のように、ストアドプロシージャまたはエンティティフレームワークを使用する方が良いアプローチになります。また、変数に意味のある名前を付けるようにしてください。 "s"の代わりに "insertIntoCourse"を使用するか、何をしているかを記述する

+0

これで動作しますが、データはGridViewに表示されません。また、DeptID列に追加するデータはDepartmentテーブルにのみ追加され、DeptIDはコーステーブルに追加されます。それは自動的に両方のテーブルに追加するdeptID列に任意のデータを追加する方法です。 –

+0

SQL管理スタジオで最初に動作するようにクエリを取得し、それをあなたのコードに戻していくつかの変数を追加するのは簡単です。私はストアドプロシージャを見ていますが、SQL文の文字列はこれ以上使用されないためです – JKerny

0

"tbdeptID.Textは、" IDだけ右あなたの部門を与えていますか?あなたは

文字列s = "コースに(Course_IDに、Name_of_course、)を挿入した値( '" + tbid.Text + " ''" + tbcourse_name.Text +「」あなたの最初のステートメントを変更することができるはず、) ";

SQLプロファイラの実行を開始してください。実際のクエリがサーバーで実行されているかどうかを確認するには、良いツールです。

関連する問題