我已成功通过富文本字段将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;
}
}
非常感谢
答案 0 :(得分:2)
你应该开始使用的几件事情:
今天你这样做的方式既脆弱/脆弱,并且会在你的表发生变化时中断,而且你的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(....) { ... }
构造来保护和处置您的SqlConnection
和SqlCommand
对象实例ExecuteReader
对象上调用ExecuteScalar
或SqlCommand
。这样的事情:
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 :(得分:1)
这个问题显得含糊不清但是:在添加了记录之后,调用另一个名为“GetData”的方法(你需要写这个)。此方法可能使用cmd.ExecuteReader()来调用db。确保查询中的select语句在表名末尾有“FOR XML”。