2010-11-20 2 views
1

Я вставил xml в SQL Server 2005 через поле с расширенным текстом успешно, теперь то, что я хочу сделать, это получить XML из базы данных, но значения отдельно и схемы отдельно ... как я могу это сделать в своем существующем коде?Как получить xml из SQL Server 2005 в C#?

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(....) { ... } конструкции для защиты и утилизируйте экземпляры объектов SqlConnection и SqlCommand
  • извлеките XML из базы данных, используйте простой запрос SELECT и вызовите либо 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

Вопрос кажется расплывчатым, но: После того, как добавил запись, вызов другой метод, называемый сказать «GetData »(вам нужно написать это). Этот метод может использовать cmd.ExecuteReader() для вызова db. Убедитесь, что ваш оператор select в вашем запросе имеет «FOR XML» в конце имени таблицы.

+0

может у написать, что FUNC ?? мой Q - это, например. xml is hi ......................., поэтому он показывает john hi – salman

+0

Где находится «hi»? Это не имя и идентификатор, как указано в вашем вопросе. – CarneyCode

+0

ok оставить привет может помочь мне получить атрибут ??? – salman

Смежные вопросы