注意:如果窗体程序使用内置数据库
你在VS中看的数据库是项目中的数据库,你编译时用到的的数据库是debug下的数据库文件,查看你项目中数据库的“复制到输出目录”属性,肯定是始终复制,意思就是每次拟推迟编译的时候会把你项目中的数据库覆盖你debug下的数据库,所以你每次编译后虽然在debug下的数据库成功更改数据了,但是之后就会被外面的数据库覆盖。
解决办法:
在程序的main函数中添加如下代码:
string dataDir = AppDomain.CurrentDomain.BaseDirectory;
if(dataDir.EndsWith(@"inRelease")||dataDir.EndsWith(@"inDebug"))
{
dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;
AppDomain.CurrentDomain.SetData("DataDirectory", dataDir);
}
放在主窗口代码运行之前,就一劳永逸的解决了这个问题啊
声明一个DataContext对象,
string str = @"Data Source=.SQLEXPRESS;AttachDBFilename=|DataDirectory|Student.mdf;Integrated Security=true";
DataContext db=new DataContext(str);//包含数据库信息的DataContext
var query=from info in db.某个表
select info;
或这是:
DataContext db=new DataContext();
Table<数据库中的某个表> Table对象= db.GetTable<数据库中的某个表>(); //获得某表信息
var query = from info in Table对象
select info;
//插入数据
Table对象.InsertOnSubmit(数据);
db.SubmitChanges();//更新到数据库
例如:
LinqToSqlDataContext lqdacontext = new LinqToSqlDataContext();
T_Stu user = new T_Stu();
user.ID = "100112004";
user.Sname = "王怡琳";
user.Sex = "女";
user.Sage = 20;
Table<T_Stu> userlist = lqdacontext.GetTable<T_Stu>();//获得表集合
userlist.InsertOnSubmit(user);
//删除数据
查询到某条数据
Table对象.DeleteOnSubmit(数据);
例如:
LinqToSqlDataContext db = new LinqToSqlDataContext();
Table<T_Stu> deleList = lqdacontext.GetTable<T_Stu>();
var deleteData = from userdel in lqdacontext.T_Stu//返回用户数据
where userdel.ID == "100112005"
select userdel;
foreach(var deleinfo in deleteData)
{
deleList.DeleteOnSubmit(deleinfo);//从表中删除用户数据
}
db.SubmitChanges();//更新数据库
//更新数据
//查询某条记录后
foreach(var info in qurey)
{
//修改
}
例如:DataContext db=new DataContext(str);
var updataquery = from userinfo in db.T_Stu
// where userinfo.ID == "100112005"
// select userinfo;
//foreach (var newuserinfo in updataquery)
//{
// db.Sname = "吴鑫";
//}
//db.SubmitChanges();