c# vs2010连接SQLServer2008时出现“未将对象引用设置到对象的实例。”
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# vs2010连接SQLServer2008时出现“未将对象引用设置到对象的实例。”相关的知识,希望对你有一定的参考价值。
代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Configuration;
using System.Data;
using System.Web.Security;
using System.IO;
namespace test
public partial class teat1 : System.Web.UI.Page
protected void Page_Load(object sender, EventArgs e)
protected void SqlDataSource1_Selecting1(object sender, SqlDataSourceSelectingEventArgs e)
protected void Button1_Click(object sender, EventArgs e)
string name;
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["Data Source=userswo-remuhgn;Initial Catalog=myNewsDB;Persist Security Info=True;User ID=myNew;Password=12345"].ToString());
con.Open();
SqlCommand newCom = new SqlCommand("SELECT N_ID,N_name,N_pwd FROM admin",con);
SqlDataReader dr=newCom.ExecuteReader();
dr.Read();
name = dr["N_name"].ToString();
Label1.Text = name;
con.Close();
麻烦高手看一下哪里有问题啊
代码没错但是就是每次一运行就出现“未将对象引用设置到对象的实例”
string Constr=ConfigurationManager.ConnectionStrings["这个是webconfig里的name"].ConnectionString;
SqlConnection con = new SqlConnection(Constr);
con.Open();
SqlCommand newCom = new SqlCommand("SELECT N_ID,N_name,N_pwd FROM admin",con);
SqlDataReader dr=newCom.ExecuteReader();
dr.Read();
name = dr["N_name"].ToString();
Label1.Text = name;
con.Close();
本回答被提问者采纳 参考技术B SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["Data Source=userswo-remuhgn;Initial Catalog=myNewsDB;Persist Security Info=True;User ID=myNew;Password=12345"].ToString());
改成
SqlConnection con = new SqlConnection("Data Source=userswo-remuhgn;Initial Catalog=myNewsDB;Persist Security Info=True;User ID=myNew;Password=12345");
或者
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["WebConfig文件中,对应的Key"]);
用C#通过sql语句操作Sqlserver数据库教程
目录
必要准备
你得有一个sqlserver数据库,并且要和vs项目连接。
关于VS连接sqlserver数据库的教程前几天发过了,链接如下
VS2022连接sqlserver数据库教程_予我心安A3的博客-CSDN博客_vs如何连接数据库sqlserver
调用用于访问和控制数据库的程序集。还得确保你真的安装了这个程序集
using System.Data.SqlClient;
安装好如下才对
填写连接参数字符串
无账号密码的数据库服务器(windows用户认证)这样写即可
string connStr = "Data Source=LAPTOP-82MUPKTO;Initial Catalog=CSDN予我心安A3的数据库;Integrated Security=True";
//LAPTOP-82MUPKTO 连接的数据库服务器名
//CSDN予我心安A3的数据库 连接的数据库名
有账号密码登录的数据库服务器(sqlserver身份认证)这样写
string connStr = "Data Source=服务器名;Initial Catalog=数据库名;User ID = 账号;Password=密码";
将连接参数字符串传入数据库链接类,生成链接对象conn
SqlConnection conn = new SqlConnection(connStr);
//SqlConnection 变量名 = new SqlConnection(参数字符串或存储了参数字符串的变量);
进行链接的测试,运行不报错即链接成功
//测试数据
conn.Open();
if (conn.State == ConnectionState.Open)
MessageBox.Show("数据库连接成功!");//winform中可以用
Console.WriteLine("连接成功");//控制台用
conn.Close();//关闭数据库链接,用完就关,别挂着
必要准备已经OK了
下面来讲sql语句的编写和执行。
SQL语句编写加执行
编写
我们定义一个string类型的sql变量来存储我们的sql语句,sql语句只需用原本的语法即可,无需做变化。
sqlserver中创建数据表一般是这么写的
这里把他转成一行的,不用管缩进 。
string sql = "create table csdn予我心安的数据表1(name varchar(8) not null)";
有人会问,我的sql语句内容要持续变化,但格式基本不变咋办。总不能另写一条吧。其实没那么折腾,用C#的String.Format()生成sql语句字符串就好了.
C#中string.format用法 C#中string.format用法详解(IT技术)
比如说我要创建的数据表名要替换,我们在表名这加个占位符就OK
string tablename="csdn予我心安的数据表1";//我是表名
string sql = String.Format("create table 0(name varchar(8) not null)", tablename);
//tablename的内容会替换掉字符串中的0,所以sql的内容会随着tablename变换而改变
执行
创建执行器
sql语句我们已经写好了,接下了就要执行了
我们调用SqlCommand类生成一个sql语句执行器cmd,传入sql语句和链接变量
SqlCommand cmd = new SqlCommand(sql, conn);
//格式: SqlCommand 自定义执行器变量名= new SqlCommand(sql字符串变量, 链接变量);
执行器我们创建好了,接下来要选择执行方法,不同的执行方法有不同的返回值。
特别提醒:使用前记得打开链接
conn.Open();
ExecuteNonQuery()方式执行
cmd.ExecuteNonQuery();
ExecuteScalar()方式执行
cmd.ExecuteScalar();
二者区别
ExecuteReader()方式执行
cmd.ExecuteReader();
这个执行方式的作用我会在下面的实例中详细讲解
特别提醒:执行完请关闭连接
conn.Close();
实例:
1-创建一张数据表
为小明创建一张个人成绩表
要用到sql语句中创建数据表的指令
create table 表名
(
列名 数据类型 是否允许为空(null||not null),
列名2 数据类型 是否允许为空(null||not null),
列名3 数据类型 是否允许为空(null||not null),
……
列名n 数据类型 是否允许为空(null||not null)
)
C#代码
using System.Data.SqlClient;//头别忘了,如果加了头还显示未调用,请检查Nuget包
public static void addtable(string tablename)
//测试连接数据库
string connStr = "Data Source=LAPTOP-82MUPKTO;Initial Catalog=CSDN予我心安A3的数据库;Integrated Security=True";
SqlConnection conn = new SqlConnection(connStr);
//打开数据库
conn.Open();
//编写sql语句,语法即sql语法
string sql = String.Format("create table 0(课程名 varchar(11) not null,成绩 tinyint not null)", tablename);
SqlCommand cmd = new SqlCommand(sql, conn);
//贴心,异常处理都安排上了
try
cmd.ExecuteNonQuery();
Console.WriteLine("数据表创建成功");
catch (SqlException ae)
Console.WriteLine("数据表创建失败");
Console.WriteLine(ae.Message);
finally
conn.Close();//对数据库操作完成后,需要关闭数据库,释放内存
addtable("考试成绩表")
芜湖起飞
2-向表中插入数据
小明的计算机科学考试考了100分,帮他录进去
要用到sql中的插入数据指令
insert into 表名
values
('数据1','数据2','数据3')//第一行数据,表结构有几列就几个呗,允许为空的地方可以就打''
('数据1','数据2','数据3')//第二行数据,表结构有几列就几个呗,允许为空的地方可以就打''
public static void adddata(string classname,int grade)
//测试连接数据库
string connStr = "Data Source=LAPTOP-82MUPKTO;Initial Catalog=CSDN予我心安A3的数据库;Integrated Security=True";
SqlConnection conn = new SqlConnection(connStr);
//打开数据库
conn.Open();
//编写sql语句,语法即sql语法
string sql = String.Format("insert into 考试成绩表 values('0','1')",classname,grade);
SqlCommand cmd = new SqlCommand(sql, conn);
try
cmd.ExecuteNonQuery();
Console.WriteLine("成绩录入成功");
catch (SqlException ae)
Console.WriteLine("成绩录入失败");
Console.WriteLine(ae.Message);
finally
conn.Close();//对数据库操作完成后,需要关闭数据库,释放内存
data_Control.adddata("计算机科学",100);
3-修改表中数据
我去,小明考试作弊被发现,成绩0分,帮他改过来
update 表名
set 列名1='值',列名2='值' where 筛选条件
public static void changedata(string classname,int new_grade)
//测试连接数据库
string connStr = "Data Source=LAPTOP-82MUPKTO;Initial Catalog=CSDN予我心安A3的数据库;Integrated Security=True";
SqlConnection conn = new SqlConnection(connStr);
//打开数据库
conn.Open();
//编写sql语句,语法即sql语法
string sql = String.Format("update 考试成绩表 set 成绩='0' where 课程名='1'", new_grade,classname);
SqlCommand cmd = new SqlCommand(sql, conn);
try
cmd.ExecuteNonQuery();
Console.WriteLine("成绩修改成功");
catch (SqlException ae)
Console.WriteLine("成绩修改失败");
Console.WriteLine(ae.Message);
finally
conn.Close();//对数据库操作完成后,需要关闭数据库,释放内存
changedata("计算机科学",0);
4-删除表中数据
小明害怕被老爸竹笋炒肉丝,给我1包辣条贿赂我删掉这条记录,我肯定不会为了一包辣条就帮他
,但他拿了2包就是另一回事了。
delete from 表名 where 筛选条件
public static void delete_data(string classname)
//测试连接数据库
string connStr = "Data Source=LAPTOP-82MUPKTO;Initial Catalog=CSDN予我心安A3的数据库;Integrated Security=True";
SqlConnection conn = new SqlConnection(connStr);
//打开数据库
conn.Open();
//编写sql语句,语法即sql语法
string sql = String.Format("delete from 考试成绩表 where 课程名='0'", classname);
SqlCommand cmd = new SqlCommand(sql, conn);
try
cmd.ExecuteNonQuery();
Console.WriteLine("成绩删除成功");
catch (SqlException ae)
Console.WriteLine("成绩删除失败");
Console.WriteLine(ae.Message);
finally
conn.Close();//对数据库操作完成后,需要关闭数据库,释放内存
delete_data("计算机科学");
小明开心的回家了,他一走我又把成绩写回去了……
5-读取表中数据
学校要把小明的成绩单打印出来。
ExecuteReader()的用法来了啊,谢谢你看到这里。
用法就在下面的代码中啦
select * from 考试成绩表
public static void get_data()
//测试连接数据库
string connStr = "Data Source=LAPTOP-82MUPKTO;Initial Catalog=CSDN予我心安A3的数据库;Integrated Security=True";
SqlConnection conn = new SqlConnection(connStr);
//打开数据库
conn.Open();
//编写sql语句,语法即sql语法
string sql = String.Format("select * from 考试成绩表");
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataReader rdr = cmd.ExecuteReader();//定义数据读取器rdr获取传回的数据
while (rdr.Read())//每次执行一次Read(),从数据里读取一行数据
string classname=rdr["课程名"].ToString();//根据列名,获得该行里的课程名信息,由于rdr["课程名"]返回的是object类型,所以要进行类型转化,下面成绩一样的原理
int grade = Convert.ToInt32(rdr["成绩"]);//根据列名,获得该行里的成绩信息
Console.WriteLine("课程名:0,成绩:1",classname,grade);
conn.Close();//读取时要一直保证数据库是打开的
小明伤心的拿着成绩单走了..........
以上是关于c# vs2010连接SQLServer2008时出现“未将对象引用设置到对象的实例。”的主要内容,如果未能解决你的问题,请参考以下文章
如何在 VS 2010 中出现第一个错误时停止 C# 编译(VS 2008 宏不起作用)!
C# windows应用程序打包 (VS2010+SQL Server 2008)