none
这个方法该如何用ado.net实现。 RRS feed

答案

  • 你好,请参考示例:

    public static bool CreateNews(News news)
    {
        string connectionString = WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
        string sqlText = string.Format("insert into news (CategoryId,UrlAddress,Title,Summary,Context,META_DESCRIPTION,META_KEYWORDS,IsGroom) values ({0},'{1}','{2}','{3}','{4}','{5}','{6}',{7})", news.CategoryId, news.UrlAddress, news.Title, news.Summary, news.Context, news.META_DESCRIPTION, news.META_KEYWORDS, news.IsGroom);

        OleDbConnection conn = new OleDbConnection(connectionString);
        OleDbCommand comm = new OleDbCommand(sqlText, conn);

        int result = 0;

        conn.Open();
        result = comm.ExecuteNonQuery();
        conn.Close();

        return result > 0;
    }
    jon.valett@gmail.com
    2009年8月3日 1:55
    版主
  • 对于整张表更新,推荐使用DataAdapter类来实现,这样比较方便
    也可以像邹俊才那样,不过得考虑injection的情形,最好用参数化实现,直接用string不仅有安全性的危险,而且会因为sql中的一些字符导致整个语句错误
    OleDbParameter param=DbCommandInstance.CreateParameter...
    ...
    DbCommandInstance.Parameters.Add...


    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    2009年8月3日 4:53
    版主
  • 你好!
         这样试试: 
    public DataSet CreateCmdsAndUpdate(DataSet dataSet, string connectionString,
        string queryString) 
    {
        using (OleDbConnection connection = new OleDbConnection(connectionString))
        {
            OleDbDataAdapter adapter = new OleDbDataAdapter();
            adapter.SelectCommand = new OleDbCommand(queryString, connection);
            OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);
    
            connection.Open();
    
            DataSet customers = new DataSet();
            adapter.Fill(customers);
    
            //code to modify data in dataset here
    
            adapter.Update(customers);
    
            return customers;
        }
    }
    

    周雪峰
    2009年8月3日 2:20
    版主
  • 不知道对于如下面博客文章所示的攻击方式,您的字符过滤是否有效?
    http://www.cnblogs.com/Ryu666/archive/2009/07/28/1533248.html
    还是用参数化语句执行可靠性高一些。



    理解的越多,需要记忆的就越少
    2009年8月3日 2:48
    版主
  • 你好,你的这个方法最好是通过 DataAdapter.Update(DataTable) 来更新数据,这里的 querystring 是包含主键或唯一索引的 SQL 语句并将这个SQL 赋给 SelectCommand,CommandBuilder 会通过这个 querystring 在调用更新时自动生成 Insert, Update, Delete 语句。通过设置 querystring 显示的指定 SelectCommand 是必要的。另外你可以使用强类型数据集,设置好之后你需要引用生成的 TableAdapter 就可以了
    知识改变命运,奋斗成就人生!
    2009年8月3日 3:01
    版主
  • 还是使用参数最稳妥。初学者还是使用DataAdapter,其自动生成的4个command都是采用参数的方法。
    2009年8月3日 3:33

全部回复

  • 你好,请参考示例:

    public static bool CreateNews(News news)
    {
        string connectionString = WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
        string sqlText = string.Format("insert into news (CategoryId,UrlAddress,Title,Summary,Context,META_DESCRIPTION,META_KEYWORDS,IsGroom) values ({0},'{1}','{2}','{3}','{4}','{5}','{6}',{7})", news.CategoryId, news.UrlAddress, news.Title, news.Summary, news.Context, news.META_DESCRIPTION, news.META_KEYWORDS, news.IsGroom);

        OleDbConnection conn = new OleDbConnection(connectionString);
        OleDbCommand comm = new OleDbCommand(sqlText, conn);

        int result = 0;

        conn.Open();
        result = comm.ExecuteNonQuery();
        conn.Close();

        return result > 0;
    }
    jon.valett@gmail.com
    2009年8月3日 1:55
    版主
  • 十分感谢。
    2009年8月3日 1:59
  • 邹俊才 ,您的写法是否有很严重的被Sql注入的风险?

    理解的越多,需要记忆的就越少
    2009年8月3日 2:19
    版主
  • 你好!
         这样试试: 
    public DataSet CreateCmdsAndUpdate(DataSet dataSet, string connectionString,
        string queryString) 
    {
        using (OleDbConnection connection = new OleDbConnection(connectionString))
        {
            OleDbDataAdapter adapter = new OleDbDataAdapter();
            adapter.SelectCommand = new OleDbCommand(queryString, connection);
            OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);
    
            connection.Open();
    
            DataSet customers = new DataSet();
            adapter.Fill(customers);
    
            //code to modify data in dataset here
    
            adapter.Update(customers);
    
            return customers;
        }
    }
    

    周雪峰
    2009年8月3日 2:20
    版主
  • 邹俊才  ,您的写法是否有很严重的被Sql注入的风险?

    理解的越多,需要记忆的就越少
    你好,Sql字符过滤在另外一个静态函数实现。

    jon.valett@gmail.com
    2009年8月3日 2:24
    版主
  • 你好,你写的方法传进来的是querystring字符串,而我要的方法是传进来就是一张表。
    2009年8月3日 2:43
  • 不知道对于如下面博客文章所示的攻击方式,您的字符过滤是否有效?
    http://www.cnblogs.com/Ryu666/archive/2009/07/28/1533248.html
    还是用参数化语句执行可靠性高一些。



    理解的越多,需要记忆的就越少
    2009年8月3日 2:48
    版主
  • 你好,你的这个方法最好是通过 DataAdapter.Update(DataTable) 来更新数据,这里的 querystring 是包含主键或唯一索引的 SQL 语句并将这个SQL 赋给 SelectCommand,CommandBuilder 会通过这个 querystring 在调用更新时自动生成 Insert, Update, Delete 语句。通过设置 querystring 显示的指定 SelectCommand 是必要的。另外你可以使用强类型数据集,设置好之后你需要引用生成的 TableAdapter 就可以了
    知识改变命运,奋斗成就人生!
    2009年8月3日 3:01
    版主
  • 还是使用参数最稳妥。初学者还是使用DataAdapter,其自动生成的4个command都是采用参数的方法。
    2009年8月3日 3:33
  • 对于整张表更新,推荐使用DataAdapter类来实现,这样比较方便
    也可以像邹俊才那样,不过得考虑injection的情形,最好用参数化实现,直接用string不仅有安全性的危险,而且会因为sql中的一些字符导致整个语句错误
    OleDbParameter param=DbCommandInstance.CreateParameter...
    ...
    DbCommandInstance.Parameters.Add...


    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    2009年8月3日 4:53
    版主