不是很清楚你遇到的问题是不知道怎么用wcf还是补助到怎么用Linq
如果是不知道怎么用wcf,这个一时半会是说不清楚的,建议你看看教程;
如果是不清楚怎么用linq 这个就简单了:
你的接口写成:
//假设你的EntityFramework实例名为:
ExampleEntities edm = new ExampleEntities();
public UserInfo GetUserInfo(int id)
{
//可以用linq to sql,不过不清楚你的数据表结构,这里就不介绍了
//因为linq经常配合ORM共同使用,这里以其中一种EntityFramework为例:
var query = edmUserInfoFirstOrDefault(s => sID == id);
return (UserInfo)query;
}
//上面介绍了linq to Entity的查询方法,关于其它的增删改查的,你可以查看下关于EntityFramework的相关资料,都是很简单的
你在VS中看的数据库是项目中的数据库,你编译时用到的的数据库是debug下的数据库文件,查看你项目中数据库的“复制到输出目录”属性,肯定是始终复制,意思就是每次拟推迟编译的时候会把你项目中的数据库覆盖你debug下的数据库,所以你每次编译后虽然在debug下的数据库成功更改数据了,但是之后就会被外面的数据库覆盖。
解决办法:
在程序的main函数中添加如下代码:
string dataDir = AppDomainCurrentDomainBaseDirectory;
if(dataDirEndsWith(@"\bin\Release\")||dataDirEndsWith(@"\bin\Debug\"))
{
dataDir = SystemIODirectoryGetParent(dataDir)ParentParentFullName;
AppDomainCurrentDomainSetData("DataDirectory", dataDir);
}
放在主窗口代码运行之前,就一劳永逸的解决了这个问题啊
using System;
using SystemCollectionsGeneric;
using SystemComponentModel;
using SystemData;
using SystemDrawing;
using SystemLinq;
using SystemText;
using SystemThreadingTasks;
using SystemWindowsForms;
using SystemDataSqlClient;
using SystemNet;
namespace WindowsFormsApplication1
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
//获取本机IP,然后存储在strAddr中
public string getLocalIP()
{
string strHostName = DnsGetHostName(); //得到本机的主机名
IPHostEntry ipEntry = DnsGetHostEntry(strHostName); //取得本机IP
string strAddr = ipEntryAddressList[0]ToString();
return (strAddr);
}
private void button1_Click(object sender, EventArgs e)
{
string username;
string password;
string LocalIP;
string DBIP1 = "";
LocalIP = getLocalIP();
string dataDir = AppDomainCurrentDomainBaseDirectory;
if (dataDirEndsWith(@"\bin\Debug\")
|| dataDirEndsWith(@"\bin\Release\"))
{
dataDir = SystemIODirectoryGetParent(dataDir)ParentParentFullName;
AppDomainCurrentDomainSetData("DataDirectory", dataDir);
}
//定义用户名和密码变量
username = textBox1Text;
password = textBox2Text;
//使用创建数据库连接
using (SqlConnection conn = new SqlConnection(@"Data Source=数据库;Initial Catalog=xxx;User ID=数据库用户名;Password=密码"))
{
connOpen();//打开数据库
//获取数据库中当前登录名的IP字段,存储与DBIP1中
using (SqlCommand getDBIP = connCreateCommand())
{
getDBIPCommandText = "select from LoginDetail where UID='" + username + "'";
using (SqlDataReader DBIP = getDBIPExecuteReader())
if (DBIPRead())
{
DBIP1 = DBIPGetString(DBIPGetOrdinal("IPaddr"));
}
}
using (SqlCommand cmd = connCreateCommand())
{
//查询命令为:查询UserName等于输入的用户名
cmdCommandText = "select from LoginDetail where UID='" + username + "'";
//将查询到的数据保存在reader这个变量里
using (SqlDataReader reader = cmdExecuteReader())
{
//如果readerRead()的结果不为空, 则说明输入的用户名存在
if (readerRead())
{
/从数据库里查询出和用户相对应的PassWorld的值
readerGetOrdinal("PassWord")的作用是得到PassWord的为这行数据中的第几列,返回回值是int
readerGetString()的作用是得到第几列的值,返回类型为String
/
string dbpassword = readerGetString(readerGetOrdinal("PWD"));
//比较用户输入的密码与从数据库中查询到的密码是否一至,如果一至,就登录成功
if (password == dbpassword)
{
if (DBIP1 == "")//如果数据库中当前登录的ID有记录IP地址,则拒绝登录
{
Form1 form1 = new Form1();
linq to sql 是c#的35技术,和adonet基本没有联系,但可以转换成adonet的DataTable,它可以简便的替代你的 adonet的代码,比如你创建一个linq to sql类命名为:DataClasses1,你打开这个,然后添加进你要 *** 作的TALBE,假设为TABLE1,引用这个类时用:DataClasses1DataContext context=new DataClasses1DataContext();然后下面开始写你的查询或增加或删除语句,不熟悉LINQ TO SQL 的人刚开始会被它的复杂弄的头晕,写一段时间就慢慢习惯了,不过说实在的,有些复杂的SQL用LINQ TO SQL写起来简直麻烦的很,比如要用到Group by 等的SQL。我写一个简单的LINQ 转 List 泛型的类,给你参考: public List<myclass> myc = new List<myclass>();
public struct myclass
{
public string ManfaceCode;
public string ProductNumber;
public double ExpectedNumber;
} public void ReturnHList() //vw_生产报关系统_档案H 视图
{
DataClasses1DataContext dclass = new DataClasses1DataContext();
List<myclass> myv = (from cc in dclassCOPTCs //COPTCs 是一个表
join cd in dclassCOPTDs on new { ccTC001, ccTC002 } //COPTDs 这也是一个表
equals new
{
TC001 = cdTD001,
TC002 = cdTD002
}
into x
from cf in xDefaultIfEmpty()
join ma in dclassMOCTAs //MOCTAs 这也是一个表
on new
{
cfTD001,
cfTD002,
cfTD003
}
equals new
{
TD001 = maTA026,
TD002 = maTA027,
TD003 = maTA028
}
where ((new char[] { 'Y', 'y' })Contains(maTA013) &&
new char[] { 'Y', 'y' }Contains(ccTC027)
&& ConvertToDateTime(maTA003) > ConvertToDateTime("2010-07-20")
&& ConvertToDateTime(maTA003) < ConvertToDateTime("2010-12-31")
) select new
{
工单单别 = maTA001,
工单单号 = maTA002,
成品品号 = maTA006,
预计产量 = maTA015
//ma
}
/////ok
into my
select new myclass
{
ManfaceCode=my工单单别+my工单单号,
ProductNumber = my成品品号,
ExpectedNumber = ConvertToDouble(my预计产量),
})ToList();
myc = myv;
} 以上的查询语句应该包括大部分SQL查询的内容了,语句用到了多字段、多表、多条件,如果你细心你会发现LINQ 生成语句其实就是一个查询的SQL,这就是说LINQ 和ADO的本质应该是相同的,都是用SQL去读取表,然后返回数据集。然后接下来的就是把这个List转成DataTable了,这个对你来说估计不难吧?直接用for循环写进去了。 至于ADONET 转 LINQ ,道理是一样的,你把DataTable 转成List,然后再用LINQ 去读这个List 了。这里就不写了。写了这么多,可以了吗?原创哦。
以上就是关于silverlight调用WCF读取数据库,会写填充到datagrid,但是我想用linq查询某一条符合条件的数据到文本框中,全部的内容,包括:silverlight调用WCF读取数据库,会写填充到datagrid,但是我想用linq查询某一条符合条件的数据到文本框中,、C# VS2010中linq可以读入数据库,却无法写入数据库、怎么通过C#程序控制数据的读取并写入数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)