2010-11-20 20 views
1

リッチテキストフィールドを使用してSQL Server 2005にxmlを挿入しました。 DBからxmlを取得しますが、別々に値を取得し、スキーマを別にしています...どうすれば既存のコードで行うことができますか?挿入のコードままC#でSQL Server 2005からxmlを取り出す方法は?

public void setData() 
{ 
    dc.ID = textBox1.Text; 
    dc.Name = richTextBox1.Text; 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    setData(); 

    int flag = db.InsertData("insert into xmlTB values('" + dc.ID + "','" + dc.Name + "')"); 
    if (flag > 0) 
     MessageBox.Show("Record Added"); 
    else 
     MessageBox.Show("Not Added"); 

    try 
    { 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
} 

別のクラスである:

public SqlConnection conn = new SqlConnection("Data Source=SERVER1\\SQLEXPRESS;Initial Catalog=xml;Integrated Security=True;Pooling=False"); 

public int flag = 0; 
public SqlDataReader sdr = null; 
public DBConnection() { } // constructor 

public int InsertData(string qry) 
{ 
    try 
    { 
      conn.Open(); 
      SqlCommand cmd = new SqlCommand(qry, conn); 
      flag = cmd.ExecuteNonQuery(); 
      conn.Close(); 
      return flag; 
     } 
     catch (Exception) 
     { 
      return flag; 
     } 
} 

おかげでたくさん

答えて

2

いくつかのこと:

  • 使用
  • あなたのINSERT文で列の特定リストを使用してテーブルに値を挿入するためのクエリをパラメータ化 - 、そうでない場合は次の時間をそのテーブルが変更された場合、INSERTは失敗します

今日のやり方は壊れやすい/脆弱で、テーブル変更、加えてSQLコマンドの連結は、SQLインジェクション攻撃のための絶好の機会です。そのようにしないでください!

だからあなたの最初の方法は、このようなものになります。第二に

private void button1_Click(object sender, EventArgs e) 
{ 
    setData(); 

    string query = "INSERT INTO dbo.xmlTB(ID, Name) VALUES(@ID, @Name)"; 

    int flag = db.InsertData(query, ...(somehow pass in the parameters!.....); 
    ......  
} 

を、あなたの第二の方法は、

  • あなたSqlConnectionSqlCommandオブジェクトインスタンス
  • を保護し、処分するusing(....) { ... }構文を使用する必要がありますデータベースからXMLを取得するには、単純なSELECTクエリを使用してまたはExecuteScalarをで呼び出しますオブジェクトです。このよう

何か:

public string ReadXmlData(int ID) 
{ 
    string query = "SELECT XmlContent FROM dbo.xmlTB WHERE ID = @ID"; 
    string connectionString = "Data Source=SERVER1\\SQLEXPRESS;Initial Catalog=xml;Integrated Security=True;Pooling=False"; 

    using(SqlConnection conn = new SqlConnection(connectionString)) 
    using(SqlCommand cmd = new SqlCommand(query, conn)) 
    { 
     cmd.Parameters.Add("@ID", SqlDbType.Int); 
     cmd.Parameters["@ID"].Value = ID; 

     conn.Open(); 
     string xmlContents = cmd.ExecuteScalar().ToString(); 
     conn.Close(); 

     return xmlContents; 
    } 
    catch (Exception) 
    { 
     return flag; 
    } 
} 
1

質問が漠然と表示されますが:レコードが追加した後、「GetDataメソッドを言うと呼ばれる別のメソッドを呼び出します"(これを書く必要があります)。このメソッドは、cmd.ExecuteReader()を使用してdbを呼び出すことがあります。クエリのSELECTステートメントに、テーブル名の最後に "FOR XML"が含まれていることを確認します。あなたは間違いなく使用して開始する必要があります

+0

uはそのFUNCを書くことができます?私のQは例えばです。 xmlはhi .......................ですので、それはジョンのこんにちは – salman

+0

を示しています "こんにちは"はどこから来ましたか?あなたの質問に指定されているように、名前でもIDでもありません。 – CarneyCode

+0

ok leave こんにちは私はaのattribを得るのを助けることができますか? – salman