2010-11-20 23 views
1

我已經通過富文本字段成功插入到SQL Server 2005中, 現在我想要做的就是從數據庫中檢索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!.....); 
    ......  
} 

其次,你的第二個方法應該

  • 使用using(....) { ... }結構,以保護和處置您的SqlConnectionSqlCommand對象實例
  • 請從數據庫中檢索XML,使用簡單的SELECT查詢並在上調用ExecuteReader或對象。

事情是這樣的:

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()來調用數據庫。確保查詢中的select語句在表名稱末尾具有「FOR XML」。

+0

ü可以寫FUNC?我的Q是例如。 xml是hi .......................所以它顯示john hi – salman 2010-11-20 12:16:22

+0

hi」從哪裏來?它既不是您的問題中指定的名稱也不是ID。 – CarneyCode 2010-11-20 12:23:09

+0

確定假期你能幫我得到一個屬性嗎? – salman 2010-11-20 12:28:01