首页新闻找找看学习计划

求助:ADO.NET 无法将void类型转换成datatable 类型

0
悬赏园豆:20 [已解决问题] 解决于 2018-06-14 07:21
namespace DAL
{
 public   class xueshengbiaos
    {


   

     public  xueshengbiaos xs(string username)
     {






         string sql = "select *  from xueshengbiaos where usernames=@username";
         List<SqlParameter> pra = new List<SqlParameter>();
         pra.Add(new SqlParameter("@usernames", username));
        DataTable dt= SqlHelper.ExecuteDataTable(sql, pra);




        
     
     }
     


    }
}

SqlHelper部分

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

namespace DAL
{
    public class SqlHelper
    {
        private static readonly string connString = ConfigurationManager.ConnectionStrings["name"].ConnectionString;
        public static int ExecuteNonQuery(string sql,params SqlParameter[] parameters )
        {
            using (SqlConnection conn = new SqlConnection(connString))
            {
                conn.Open();
                using (SqlCommand cmd = new SqlCommand(sql, conn))
                {
                   cmd.Parameters.AddRange(parameters);
                   return cmd.ExecuteNonQuery();
                }
            }
        }
        public static object ExecuteScalar(string sql, params SqlParameter[] parameters)
        {
            using (SqlConnection conn = new SqlConnection(connString))
            {
                conn.Open();
                using (SqlCommand cmd = new SqlCommand(sql, conn))
                {
                    cmd.Parameters.AddRange(parameters);
                    return cmd.ExecuteScalar();
                }
            }
        }
        public static DataTable ExecuteDataTable(string sql, params SqlParameter[] parameters)
        {
            DataSet set = new DataSet();
            using (SqlConnection conn = new SqlConnection(connString))
            {
                conn.Open();
                using (SqlCommand cmd = new SqlCommand(sql, conn))
                {
                    if (parameters!=null)
                    {
                        cmd.Parameters.AddRange(parameters); 
                    }
                    SqlDataAdapter adapter = new SqlDataAdapter(cmd);
                    adapter.Fill(set);
                    return set.Tables[0];
                }
            }
        }

        internal static void ExecuteDataTable(string sql, List<SqlParameter> pra)
        {
            throw new NotImplementedException();
        }
    }
}
liyiyong1994的主页 liyiyong1994 | 初学一级 | 园豆:181
提问于:2018-06-10 22:52
< >
分享
最佳答案
1

return set.Tables[0]; 估计set或者set.Tables[0]是null,需要对应的地方检查null,否则在null上调用方法肯定异常

收获园豆:20
2012 | 专家六级 |园豆:18877 | 2018-06-11 08:26

用SqlParameter[] 代替即可。
SqlParameter[] preate ={


new SqlParameter("@username",username)



};

liyiyong1994 | 园豆:181 (初学一级) | 2018-06-14 07:23
其他回答(3)
0

用的是第二个无返回值的静态方法:internal static void ExecuteDataTable

晨之风 | 园豆:385 (菜鸟二级) | 2018-06-11 08:48
0
   internal static void ExecuteDataTable(string sql, List<SqlParameter> pra)
    {
      throw new NotImplementedException();
    }

这个有返回值吗?

华临天下 | 园豆:1191 (小虾三级) | 2018-06-11 09:16
0

你调的是 void ExecuteDataTable(string sql, List<SqlParameter> pra) 这个方法,它确实返回void(就是每返回值),所以无法用 DataTable类型的变量来引用。

西漠以西 | 园豆:1670 (小虾三级) | 2018-06-11 09:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册