C# 操作SQL如何达到最佳方案 老手请进,问题解决高分回报

goyen 2008-09-04 10:01:28

1.我用DataSet创建一个内存临时表,和SQL数据源表结构一样,然后我每次点“添加”按钮时,写入本机临时表,在我关闭窗口或定时再跟新到数据源表里;
(我现在用DataSet,SqlDataAdapter,DataTable,DataNow)
SqlDataAdapter da = new SqlDataAdapter("SELECT BZXH,BZGDH,BZCPH,RKSL FROM KC_CPBZD WHERE RKSL=0.1", strConn);
DataSet sqlDs = new DataSet();
hxda.Fill(sqlDs, 0, 0, "KC_CPBZD");
DataTable sqlTable = new DataTable("KC_CPBZD");
sqlTable = sqlDs.Tables[0];
DataRow sqlRow = sqlTable.NewRow();
sqlRow["BZCPH"] = label5.Text;
sqlRow["RKSL"] = textBox3.Text;
sqlTable.Rows.Add(sqlRow);
MessageBox.Show("添加成功"); 以上方法只能在表里添加一行,因为在一个事件里,所以每次调用都是创建一个新的sqlTable,然后添一行;还有,我怎么把sqlTable表里的内容反映到dataGridView控件上,注意,sqlTable是内存中的,不是SQL数据源的表,我在RKSL=0.1就是让Fill填充时不填充数据!

2.另一要求,我想每次按“添加”按钮是把数据写到XML文件中,然后点击“更新按钮”再把XML的数据对应写入SQL数据源表里,简单点说就是如何(创建、读取、修改、查询、更新、删除XML文件,然后XML更新到SQL表)
3.程序里写入的是明文连接,我不想这样写,以防不安全,如下面代码;
SqlConnection conn = new SqlConnection("Initial Catalog=Meal;Data Source=DBTest;User ID=sa;Password=111");
...全文
221 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
royal1 2008-09-07
  • 打赏
  • 举报
回复
真正做项目时,把Add()、 Update()、Delete()、ExecuteStoredProcedure()、GetAll()、GetByConditions()等方法在业务层写好,以供调用。
睡回笼觉去了~
royal1 2008-09-07
  • 打赏
  • 举报
回复
使用NHibernate。 到www.nhibernate.org去下载该组件,向项目中添加NHibernate.dll的引用。
首先可以尝试下如何保存对象。

//读取上述config文件
NHibernate.Cfg.Configuration _cfg = new NHibernate.Cfg.Configuration();
_cfg.AddAssembly(ConfigurationManager.AppSettings["HBM_ASSEMBLY"]);

//ISessionFactory维护数据库的连接并进行管理,同时会保存所有持久对象的映射信息。
ISessionFactory sessionFactory = this._cfg.BuildSessionFactory();

//ISession是面向用户的主要接口,用于对象持久化,数据加载等操作
ISession session = sessionFactory.OpenSession();

//新建对象,赋值,用于做保存测试
W_User person = new W_User();
person.UID = "001";
person.UName = "Test";

//事务开始
ITransaction trans = session.BeginTransaction();
try
{
//保存对象
session.Save(person);

//提交事务
trans.Commit();
session.Close();
}
catch (Exception ex)
{
//回滚
trans.Rollback();
}


royal1 2008-09-07
  • 打赏
  • 举报
回复
由于持久化的主要应用是将内存中的数据存储到关系型的数据库中,所以类文件和XML文件是对象数据映射(ORM)的基础。

类文件(W_User.cs):由私有成员和属性组成。

public class W_User
{
private System.String m_userID;
private System.String m_userName;

virtual public System.String UID
{
get
{
return m_userID;
}
set
{
m_userID = value;
}
}

virtual public System.String UName
{
get
{
return m_userName;
}
set
{
m_userName = value;
}
}
}


XML文件(W_User.hbm.xml):它将类名与表名关联,类的属性与表的字段关联。简单地说就是告诉程序怎样将对象存入关系数据库。

<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" schema="dbo">
<class name="WareHouse.Entities.W_User,WareHouse.Entities" table="W_USER" >
<id name="UID" column="UID" type="System.String">
<generator class="assigned" />
</id>
<property name="UName" column="UName" type="System.String" />
</class>
</hibernate-mapping>


royal1 2008-09-07
  • 打赏
  • 举报
回复
app.config文件,用于配置数据库。其中appSettings中指向映射文件(类和XML)所在的命名空间。
部署后在客户端可直接修改该文件来更换数据库连接(如把MSSQL2000换成2005)。


<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.1.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</configSections>
<appSettings>
<add key="HBM_ASSEMBLY" value="WareHouse.Entities" />
</appSettings>
<nhibernate>
<add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
<add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect" />
<add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver" />
<add key="hibernate.connection.connection_string" value="Data Source =192.168.10.17;Database=fth;User ID =yexx;Password =yexx" />
<add key="hibernate.connection.isolation" value="ReadCommitted" />
<add key="hibernate.show_sql" value="true" />
</nhibernate>
</configuration>
极地_雪狼 2008-09-05
  • 打赏
  • 举报
回复
你也可以采用消息队列的方式。还有CATCH机制
wedding123 2008-09-05
  • 打赏
  • 举报
回复
NHibernate
royal1 2008-09-05
  • 打赏
  • 举报
回复
强烈建议使用对象持久化组件NHibernate!
shadowjl 2008-09-05
  • 打赏
  • 举报
回复
第三个问题,你最好写到web.config里面,web.config外部是不能访问的,而你的代码可以
shadowjl 2008-09-05
  • 打赏
  • 举报
回复
第一个问题你可以将数据集写到viewstate里面.在Page_load里判断ViewState["name"]==null null就新建一个,不为空就用(DataSet)ViewState["name"]
goyen 2008-09-05
  • 打赏
  • 举报
回复
4楼能不能说明白点,完整的示例代码!!我对C#还很陌生;
2楼的兄弟,你那个只是说了.NET,我还要C# Forms Windows的
zzuyongp 2008-09-04
  • 打赏
  • 举报
回复
1 2 都是常规问题,,,,太多就不说了。
3 可以加密 --不过没有绝对的安全,毕竟你自己的程序不是也要用到明文么?

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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