【小白求助】使用SqlDataAdapter的fill方法报错(空指针)

趁着头发多我想做游戏 2017-05-25 02:35:56
想实现一个游戏的登录和注册功能,经过测试,已经成功连接上了sql sever了,代码如下:

void Start()
{
//连接SQL
string s = @String.Format("server = {0};database = {1};uid = {2};pwd = {3};", host, databaseName, ID, pwd); ;
connection = new SqlConnection(s);
connection.Open();
}

实现注册功能的思路是,先查看数据库中是否有同名的账号,否,则调用插入函数插入账号密码到数据库中

//查询结果以DataSet类返回
public DataSet sqlCheck(string something,string tablename)
{
string sentense = " select "+something+" from "+tablename;
SqlDataAdapter _adapter = new SqlDataAdapter(sentense, connection);
DataSet ds = new DataSet();
_adapter.Fill(ds, tablename);

return ds;
}


public DataSet sqlInsert(string values,string tablename)
{
string sentense = " insert into " + tablename + " values (" + values + ")";
SqlDataAdapter _adapter = new SqlDataAdapter(sentense, connection);
DataSet ds = new DataSet();
_adapter.Fill(ds, tablename);

return ds;
}


如果分别测试两个方法,发现可以正常查看或者插入数据,但是一旦先调用sqlCheck()再调用sqlInsert()就会报错:

NullReferenceException: Object reference not set to an instance of an object
System.Data.Common.DataAdapter.BuildSchema (IDataReader reader, System.Data.DataTable table, SchemaType schemaType, MissingSchemaAction missingSchAction, MissingMappingAction missingMapAction, System.Data.Common.DataTableMappingCollection dtMapping)
System.Data.Common.DataAdapter.BuildSchema (IDataReader reader, System.Data.DataTable table, SchemaType schemaType)
System.Data.Common.DataAdapter.FillTable (System.Data.DataTable dataTable, IDataReader dataReader, Int32 startRecord, Int32 maxRecords, System.Int32& counter)
System.Data.Common.DataAdapter.FillInternal (System.Data.DataSet dataSet, System.String srcTable, IDataReader dataReader, Int32 startRecord, Int32 maxRecords)
System.Data.Common.DataAdapter.Fill (System.Data.DataSet dataSet, System.String srcTable, IDataReader dataReader, Int32 startRecord, Int32 maxRecords)
System.Data.Common.DbDataAdapter.Fill (System.Data.DataSet dataSet, Int32 startRecord, Int32 maxRecords, System.String srcTable, IDbCommand command, CommandBehavior behavior)
System.Data.Common.DbDataAdapter.Fill (System.Data.DataSet dataSet, System.String srcTable)
(wrapper remoting-invoke-with-check) System.Data.Common.DbDataAdapter:Fill (System.Data.DataSet,string)

困扰了很多天了,不知道哪里需要创建一个实例
...全文
1542 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 5 楼 qq_36704304 的回复:
兄弟,怎么解决的?求救 !!!!!
不好意思现在才看到,当时我是把

connection = new SqlConnection(s);
connection.Open();
这段代码封装到sqlCheck()、sqlInsert()那些方法里面,也就是每次调用sql的增删改查方法都要重新声明一个sqlConnection对象,不这样做的话,就会报空指针。 希望对你还有帮助!
qq_36704304 2017-06-08
  • 打赏
  • 举报
回复
兄弟,怎么解决的?求救 !!!!!
  • 打赏
  • 举报
回复
问题已经解决,谢谢
引用 2 楼 avi9111 的回复:
调用2次insert方法
  • 打赏
  • 举报
回复
引用 2 楼 avi9111 的回复:
调用2次insert方法
感谢你的回答! 确实对数据库不了解,我还是个在校生,最近在尝试用sql sever 连接u3d 赶紧试试你的方法,谢谢!
avi9111 2017-05-25
  • 打赏
  • 举报
回复
调用2次insert方法
avi9111 2017-05-25
  • 打赏
  • 举报
回复
加一下断点就可以了 这些可以重现的问题其实很好解决的。。。 第一,做游戏的可不需要查数据库 游戏数据也可以用sqlite储存 或者我今天才写了一个博客,游戏数据用xml储存 http://blog.csdn.net/avi9111/article/details/72724578 第二,就算非得查sql server也不会是你这么封装的,记得以前就又一个sqlhelper类很好用,一个类走天下即可 目测,你这个问题是,第一个方法adpter,dataset把connection持有了,没有释放,但又好像或者connection清空了 debug一下就知道connection 是不是清空(null)了 其实很简单 你测试一下,写2个insert 又或者先insert再check,你就能明白是什么问题了 用排除法即可 第三,你可能对数据库不是太了解,工作中也不会这么用的,你这么用,创造sql server工具的人会和苦恼 如果你懂得t sql和sqlserver的区别,你就不会这么做了<--这是2个完全不同的东西

2,526

社区成员

发帖
与我相关
我的任务
社区描述
Unity3D相关内容讨论专区
游戏unity 技术论坛(原bbs)
社区管理员
  • Unity3D
  • 芝麻粒儿
  • 「已注销」
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

Unity3D社区公告:

  1. 社区致力于解决各种Unity3D相关的“疑难杂症”。
  2. 社区不允许发布与Unity3D或相关技术无关内容。
  3. 社区版主邀请各位一道为打造优秀社区不懈努力。

试试用AI创作助手写篇文章吧