簡體   English   中英

如何在C#中從SQL Server 2005檢索xml?

[英]How to retrieve xml from SQL Server 2005 in C#?

我已經通過富文本字段成功地將xml插入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;
      }
 }

非常感謝

您肯定應該開始使用的幾件事:

  • 使用參數化查詢將值插入表中
  • 在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查詢並在SqlCommand對象上調用ExecuteReaderExecuteScalar

像這樣:

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;
   }
}

這個問題看起來很模糊,但是:在添加記錄后,調用另一個稱為“ GetData”的方法(您需要編寫此方法)。 此方法可能使用cmd.ExecuteReader()來調用數據庫。 確保查詢中的select語句在表名的末尾具有“ FOR XML”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM