C#中,求一个返回类型为DataTable,并用SqlParameter传参的SqlHelper

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中,求一个返回类型为DataTable,并用SqlParameter传参的SqlHelper相关的知识,希望对你有一定的参考价值。

我原来的是这样子的

public static DataTable getDateTable(string sqlString, SqlParameter[] parms)

GetConn();
DataTable dt = new DataTable();
SqlCommand cmd = new SqlCommand(sqlString);
if (parms != null)

foreach (SqlParameter p in parms)

cmd.Parameters.Add(p);


using (SqlDataAdapter sda = new SqlDataAdapter(cmd))

sda.Fill(dt);
cmd.Parameters.Clear();

return dt;

但是抛出异常:Fill: SelectCommand.Connection 属性尚未初始化

参考技术A Command和Connection没有关联起来
你的GetConn()返回的是什么?是connectionString还是 SqlConnection
如果是connectionString
public static DataTable getDateTable(string sqlString, SqlParameter[] parms)

GetConn();
SqlConnection conn = new SqlConnection(GetConn());
DataTable dt = new DataTable();
SqlCommand cmd = new SqlCommand(sqlString,conn);
if (parms != null)

foreach (SqlParameter p in parms)

cmd.Parameters.Add(p);


using (SqlDataAdapter sda = new SqlDataAdapter(cmd))

sda.Fill(dt);
cmd.Parameters.Clear();

return dt;

如果是SqlConnection
public static DataTable getDateTable(string sqlString, SqlParameter[] parms)

SqlConnection conn= GetConn();
DataTable dt = new DataTable();
SqlCommand cmd = new SqlCommand(sqlString,conn);
if (parms != null)

foreach (SqlParameter p in parms)

cmd.Parameters.Add(p);


using (SqlDataAdapter sda = new SqlDataAdapter(cmd))

sda.Fill(dt);
cmd.Parameters.Clear();

return dt;
参考技术B public static DataTable getDateTable(string sqlString, SqlParameter[] parms)


SqlConnection conn = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand(sqlString, conn);
foreach (SqlParameter sqlParam in params)

if (sqlParam != null)

cmd.Parameters.Add(sqlParam);


try

conn.Open();
SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();

sda.Fill(dt);
conn.Close();
return dt;

catch

throw;


你的这个GetConn()应该是连接数据库吧,GetConn()可能只是连接了数据库,但是没有把数据库的连接信息赋给cmd,这样你的cmd执行过程根本不能在连接数据库的情况下完成你所要执行的操作。
参考技术C 说的很明显了 ,你的SqlCommand对象需要个SqlConnection对象,但是你没提供,我猜你的GetConn();是获取配置文件中的连接字符把,你这没有为Command对象连接到数据库,本回答被提问者采纳 参考技术D new SqlDataAdapter(sql语句,连接字符串) 第5个回答  2013-10-10 你的sqlconnection呢?

这个方法没看懂,求大神解释!

这个方法什么意思啊,如果想使用这个方法,怎么调用啊!
这个方法在CompanyService这个类里面

GetaddrAll方法返回的是一个DataTable类型的表,所以你调用它要先new一个DataTable的变量来接收,然后再用foreach  把这个表的每一行取出来就OK了。


先解释下这个方法: 


  public static DataTable GetaddrAll()

//定义一个公共访问的静态方法GetaddrAll,其中DataTable为返回值的类型,这个方法没有参数

     string sql="select Caddr from company";

     //定义一个string类型的变量sql,即要传入方法GetDataTable的参数,这是一条sql语句,是从数据表company中查找Caddr字段

    try//尝试执行大括号中的代码,用于检查错误

   

        return sqlDBHelper.GetDataTable(sql);

        //调用sqlDBHelper中定义好的方法GetDataTable,并将sql语句传进去,然后return返回一个DataTable类型的数据表.

   

    catch(Exception)//如果上面的尝试执行失败,则读出异常的原因,并在下面的throw中显示出来.

   

        shrow;

   


下面说下调用的方法:

       DataTable table= CompanyService.GetaddrAll();  

      //定义一DataTable类型的变量table ,接收GetaddrAll()方法的返回值

           foreach (DataRow row in table.Rows)//遍历table中的每一行数据

           

                   string strCaddr=(string)row[0];//定义一个string变量strCaddr,用于接收每行查找到的Caddr


                  MessageBox.Show(strCaddr);//将strCaddr显示出来

           




希望能帮到你.满意采纳

参考技术A 这是到数据库去查数据,然后返回一个DataTable类型 如果调用的话 DataTable dt = GetaddrAll()就行了啊。追问

DataTable dt = CompanyService GetaddrAll();
这样对吗?

追答

不对 CompanyService c = new CompanyService ();
DataTable dt = c.GetaddrAll();

参考技术B 这样调用就OK了DataTable dt = CompanyService.GetaddrAll(); // 因为GetaddrAll()方法是静态方法,静态方法不属于任何实例对象,它仅属于该类所有。所以调用时

类名.静态方法([参数列表]);
参考技术C 这貌似是三层架构开发中BLL层中某个类中的一个静态方法,其实真正的方法是DAL层SqlDBHelper类中中的GetDataTable(sql) ,这是一个得到数据源的方法,需要一个参数(sql语句),返回一个DataTable类型数据追问

如果是三层还好说点,我学的就是三层,现在这个项目没有BLL

追答

上面的这个方法就是一个桥梁,调用SqlDBHelper类中的一个GetDataTable(sql)(带有参数)的方法,返回一个DataTable 的数据。只是这是一个静态方法,这有什么看不懂的呀?

参考技术D 查询数据库中company表中的Caddr的信息,并以DataTable类型返回
使用方法:
DataTable dt = CompanyService.GetaddrAll();
在dataGridView控件上显示 dataGridView1.DataSource=dt;

以上是关于C#中,求一个返回类型为DataTable,并用SqlParameter传参的SqlHelper的主要内容,如果未能解决你的问题,请参考以下文章

求问 C#如何将json字符串转为datatable 求详细解答

c#,datatable中对时间的过滤过滤

这个方法没看懂,求大神解释!

c#如何修改DataTable里面的特定列的数据类型

C#中如何将好几个 datatable 的信息整合到一个datatable里?或许不是简单的合并!!在线等!!30分悬赏!

C#中怎样用for循环为datatable的每一行每一列都赋值为“*”?