1.在asp中,可以利用addnew方法和insert into(sql语句)就能给access数据库添加记录,当字段很多时addnew方法特别好用,现在使用.net中给access数据库添加个记录怎么变得遥不可及?
问苍天,谁能告诉我,怎么能象asp中利用addnew方法那样在.net中给access数据库添加记录?
http://community.csdn.net/Expert/topic/5122/5122630.xml?temp=.13528082.在asp中,可以利用PageSize属性就能给access数据库分页显示数据,当数据很多时PageSize属性特别好用,现在使用.net中给access数据库分页显示数据怎么变得遥不可及,只能依靠什么破服务器端控件,一次读取所有的数据,而不管数据记录的多少吗?
问苍天,谁能告诉我,怎么能象asp中利用PageSize属性那样在.net中给access数据库分页显示?
http://community.csdn.net/Expert/topic/5121/5121517.xml?temp=.30460763.……
问苍天,谁能告诉我,怎么能象asp中利用addnew方法那样在.net中给access数据库添加记录?
http://community.csdn.net/Expert/topic/5122/5122630.xml?temp=.13528082.在asp中,可以利用PageSize属性就能给access数据库分页显示数据,当数据很多时PageSize属性特别好用,现在使用.net中给access数据库分页显示数据怎么变得遥不可及,只能依靠什么破服务器端控件,一次读取所有的数据,而不管数据记录的多少吗?
问苍天,谁能告诉我,怎么能象asp中利用PageSize属性那样在.net中给access数据库分页显示?
http://community.csdn.net/Expert/topic/5121/5121517.xml?temp=.30460763.……
你去孟子的网站看看那些分页的例子,都是非常简单的
等你用了一次两次你就有体会了
当时你学asp很容易吗?
然后写一个方法 create (user u)就可以操作了
或者找来第三方的orm工具,操作很方便
2.在asp.net中假如你要看第三页,也没有必要把所有数据都读出呀,你可以根据用户请求的页数和pagesize算出用户要的是第几条记录,然后写sql语言读出前n条语句绑定就OK了,只不过这样你在分页控件上可能不能用DataView等数据控件自已的了.
列出符合条件的一定数据,然后进行批量修改呢?
用asp.net 相信很多人轻松实现
www.webdiyer.com里面的控件另外,从ASP转到.NET有一个适应过程,这是不可避免了.当然,这个过程可能很令人痛苦,但痛苦过去之后就是喜悦,第一次,总是会痛的嘛.你必须忍耐再忍耐,不管如何难受,埋头苦学,三个月后见分晓.`
问苍天,谁能告诉我,怎么能象asp中利用addnew方法那样在.net中给access数据库添加记录?如果看了企业级范例Dowamish以及Fitch and Mather你就会感到频繁操作数据库的工作原来可以很简单。
只要asp中有的,.net肯定有,只是你不会
asp中没有的,.net照样有,只是你还是不会
objCmd = new OleDbCommand("",objConn);
objCmd.CommandText = "update product set ProNo=@ProNo,ProName=@ProName,ProPrice=@ProPrice,ProPhoto=@ProPhoto,ClassID=@ClassID,Content=@Content,UpdateTime=@UpdateTime,Editor=@Editor,Elite=@Elite where ProID = @ProID and Deleted='0'";
objCmd.Parameters.Add("@ProNo",OleDbType.VarChar,100);
objCmd.Parameters.Add("@ProName",OleDbType.VarChar,100);
objCmd.Parameters.Add("@ProPrice",OleDbType.VarChar,100);
objCmd.Parameters.Add("@ProPhoto",OleDbType.VarChar,25);
objCmd.Parameters.Add("@ClassID",OleDbType.VarChar,20);
objCmd.Parameters.Add("@Content",OleDbType.LongVarChar);
objCmd.Parameters.Add("@UpdateTime",OleDbType.DBTimeStamp);
objCmd.Parameters.Add("@Editor",OleDbType.VarChar,50);
objCmd.Parameters.Add("@Elite",OleDbType.VarChar,2);
objCmd.Parameters.Add("@ProID",OleDbType.VarChar,20);
objCmd.Parameters["@ProNo"].Value = strProNo;
objCmd.Parameters["@ProName"].Value = strProName;
objCmd.Parameters["@ProPrice"].Value = strProPrice;
objCmd.Parameters["@ProPhoto"].Value = strProPhoto;
objCmd.Parameters["@ClassID"].Value = strClassID;
objCmd.Parameters["@Content"].Value = strContent;
objCmd.Parameters["@UpdateTime"].Value = strUpdateTime;
objCmd.Parameters["@Editor"].Value = strEditor;
objCmd.Parameters["@Elite"].Value = strElite;
objCmd.Parameters["@ProID"].Value = strProID; objCmd.ExecuteNonQuery();用这种方法来添加数据,倒有点像asp中的addnew啊。至于你说的第二个问题,你一样可以用不取出全部的记录,用查询语句就行,然后邦定datalist或repeater,效率一样很高,至于datagrid是不好用,一般情况下可以不用。//先反序选取当前页及其后面的记录ID(intFxRowCount条),然后再正序在这些记录ID中读取前intMaxPerPage条记录就是当前页的记录
但是重新作了归类 只能说你不会用
好好看看文档和例子吧
其实满简单的 ASP.NET和 ASP毕竟不是一回事 不要把什么事情按照旧思路想
Dim currentIndex As Integer = 0
Dim pageSize As Integer = 5Dim orderSQL As String = "SELECT * FROM Orders ORDER BY OrderID"
Dim myDA As SqlDataAdapter = New SqlDataAdapter(orderSQL, nwindConn)Dim myDS As DataSet = New DataSet()
myDA.Fill(myDS, currentIndex, pageSize, "Orders")[C#]
int currentIndex = 0;
int pageSize = 5;string orderSQL = "SELECT * FROM Orders ORDER BY OrderID";
SqlDataAdapter myDA = new SqlDataAdapter(orderSQL, nwindConn);DataSet myDS = new DataSet();
myDA.Fill(myDS, currentIndex, pageSize, "Orders");在上例中,DataSet 只填充了 5 个记录,但却返回了整个 Orders 表。若要用相同的 5 个记录填充 DataSet 但仅返回这 5 个记录,请在 SQL 语句中使用 TOP 和 WHERE 语句,如以下代码示例所示。[Visual Basic]
Dim pageSize As Integer = 5Dim orderSQL As String = "SELECT TOP " & pageSize & " * FROM Orders ORDER BY OrderID"
Dim myDA As SqlDataAdapter = New SqlDataAdapter(orderSQL, nwindConn)Dim myDS As DataSet = New DataSet()
myDA.Fill(myDS, "Orders")[C#]
int pageSize = 5;string orderSQL = "SELECT TOP " + pageSize + " * FROM Orders ORDER BY OrderID";
SqlDataAdapter myDA = new SqlDataAdapter(orderSQL, nwindConn);DataSet myDS = new DataSet();
myDA.Fill(myDS, "Orders");
ADO.net的方式也是全读出来再分页.
我可以说你ASP也不会好到哪,你用ADDNEW的方法是比较简单,但是和insert比就效率差远了,
另外asp的分页机制也是将符合记录的数据全部取出,然后根据pagesize进行分页
在NET里象ASP那种分页就更简单了一个DATAGRID,加几句代码就搞定,不超过10分钟,你不会只说明你没搞懂,用存储过程插入数据更是方便的很,哎,塌实点
ASP时代有很多的免费代码,我估计你是免费代码看多了,到NET没代码看了,就急了
谁能告诉我为什么汽车(asp.net)没有自行车(asp)转弯那样容易啊···
这他 妈的不是废话吗,汽车确实没有自行车转弯来的容易,但是自行车能跑汽车那么快吗?
与数据库无关的,当然也支持access
using System;
using System.Data;
using System.Collections.Generic;public class MyClass
{
public static void Main()
{
DataTable dt=CreateNewTable();
DisplayDataTable(dt);
Console.Read();
}
static void DisplayDataTable(DataTable dt){
foreach(DataRowView drv in dt.DefaultView){
Console.WriteLine("name:{0} value:{1}",drv[0],drv[1]);
}
}
static DataTable CreateNewTable(){
DataTable dt=new DataTable();
dt.Columns.Add(new DataColumn("name",typeof(string)));
dt.Columns.Add(new DataColumn("value",typeof(int)));
DataRow dr;
for(int i=0;i<100;i++){
dr=dt.NewRow();
dr["name"]=i.ToString("x2");
dr["value"]=i;
dt.Rows.Add(dr);
}
return dt; }
}
Dim dt As DataTable = New DataTable()
分页也一样很简单
可以使用pagedDataSource
using System;
using System.Web.UI.WebControls;
using System.Data;
using System.Collections.Generic;public class MyClass
{
public static void Main()
{
DataTable dt=CreateNewTable();
//DisplayDataTable(dt);
PagedDataSource pds=new PagedDataSource();
pds.DataSource=dt.DefaultView;
pds.AllowPaging =true;
pds.PageSize=15;
pds.CurrentPageIndex=2;
Console.WriteLine("pagedSize:{0} CurPageIndex:{1}/PageCount:{2}"
,pds.PageSize
,pds.CurrentPageIndex
,pds.PageCount);
foreach(DataRowView drv in pds){
Console.WriteLine("name:{0} value:{1}",drv[0],drv[1]);
}
Console.Read();
}
static void DisplayDataTable(DataTable dt){
foreach(DataRowView drv in dt.DefaultView){
Console.WriteLine("name:{0} value:{1}",drv[0],drv[1]);
}
}
static DataTable CreateNewTable(){
DataTable dt=new DataTable();
dt.Columns.Add(new DataColumn("name",typeof(string)));
dt.Columns.Add(new DataColumn("value",typeof(int)));
DataRow dr;
for(int i=0;i<100;i++){
dr=dt.NewRow();
dr["name"]=i.ToString("x2");
dr["value"]=i;
dt.Rows.Add(dr);
}
return dt; }
}
?
楼上,这个我知道,好像你只把数据添加到了DataTable,并没有添加到数据库中
Dim dt As DataTable = New DataTable()你知道怎么从数据表到table
也应该知道从table到数据表
我为了方便举例用的是new DataTable,不依赖于具体的数据库而已
你可以参考dbdataadapter.update方法来了解怎么使用已知的表或行集来更新数据库
你说的其实ado.net里都有,但不再推荐你这样做而已
大家用的少是因为它的确不好不方便
你喜欢你一样可以用asp的方式来写asp.net也是可以的
--如果你认为这样更有意义
我想你要的第一个方法应该是应该是这么写的,grmp是表名。
// private void addnew()
// {
// stringstrconn="server=wshss;database=ASPNETOA;uid=sa;pwd=123";
// SqlConnection conn=new SqlConnection(strconn);
// string strsql="SELECT * FROM grmp";
// conn.Open();
// SqlDataAdapter da=new SqlDataAdapter(strsql,conn);
// SqlCommandBuilder cb=new SqlCommandBuilder(da);
// DataSet ds=new DataSet();
// da.Fill(ds,"grmp");
// DataTable dt=ds.Tables["grmp"];
// DataRow drow=dt.NewRow();
// drow["name"]=txtname.Text.ToString().Trim();
// drow["sex"]=lstsex.SelectedItem.ToString();
// drow["birthday"]=Calendar1.Text.ToString();
// drow["duty"]=txtduty.Text.ToString().Trim();
// drow["comname"]=txtcomname.Text.ToString().Trim();
// drow["comaddress"]=txtcomaddress.Text.ToString().Trim();
// drow["compost"]=txtcompost.Text.ToString().Trim();
// drow["comtel"]=txtcomtel.Text.ToString().Trim();
// drow["comfax"]=txtcomfax.Text.ToString().Trim();
// drow["homeaddress"]=txthomeaddress.Text.ToString().Trim();
// drow["homepost"]=txthomepost.Text.ToString().Trim();
// drow["hometel"]=txthometel.Text.ToString().Trim();
// drow["handtel"]=txthandtel.Text.ToString().Trim();
// drow["email"]=txtemail.Text.ToString().Trim();
// drow["qqnumber"]=txtqqnumber.Text.ToString().Trim();
// dt.Rows.Add(drow);
// da.Update(ds,"grmp");
// Response.Redirect("frmgrmpindex.aspx");
// }
用MICROSOFT用这种方法其实是一种倒退,不知道你学没学过DAO,呵呵。一堆垃圾对象和类,
MICROSOFT又把老古董的东西搬回来了。目的很明确,就是要垄断!
你说的东西反应很多问题,我在一开始和你有同样的疑问,上面的那种方法在.net中很少用。
一般的用法都是用insert into(或者update或者其它SQL)语句加上command的参数来做数据库的相关操作,
这样比ASP中要麻烦很多,我在开始的时候也很不习惯。后来明白了一点,就是MICROSOFT逼着你用SQLSERVER的数据库,还是垄断,呵呵。又跑题了。
用Insert into加command 的参数这种方法有一个好处,比如你在数据库设计了一个datatime的字段,然后用我在上面的方法添加,那么会报错的,但是如果用SQL语句加command参数的方面添加,会在该字段添加一个默认的值,说白了,就是容错。
但是,好处也是很明显的,如果在虚拟主机上运行SQL语句加command参数的这种方法,无疑是对主机的数据库系统和操作系统的考验,如果主机上的虚拟主机过多,那么可想而知,你的程序代码运行的时间加上网络的延迟时间加上数据库运行的时间and so on的和,完全是在考验最终用户的忍耐力,但是用上面方法来做,DATASET是在内存中的表,内存中存在大量的表(估计是数组吧),又是对操作系统的考验。所以无论用哪个方面,但出的结论都是:你必须使用微软的数据库和操作系统和其它所需平台(微软给你做优化),如果你不用,那么,对不起,你做的东西就是垃圾。比如说,你用MS和ORACLE连接,那么无论你做的再好,都是垃圾。
关于第二个问题:分页的问题
MSDN中有ms-help://MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconpagingthroughqueryresult.htm
自己看吧。
我说的不一定对,自己看怎么做吧。
谢谢的你的方法,可能我的问题太幼稚了,高手不愿意回答,只有新手才理我弱弱地问一下:
MSDN中有ms-help://MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconpagingthroughqueryresult.htm在哪?
是网上还是我的帮助上,网址怎么输入呀
我用Repeater控件绑定了一个数据,想要它按这样的方式显示出来怎么做?
一页显示12个table,每行四个,多的就分页,我就的是存储过程分页,现在是怎么按这个样子显示,我急啊,置于我用table是因为里面还有布局等等
<table>
<tr>
<td>
<table><tr><td>绑定</td></tr><tr><td>绑定</td><td>绑定</td></tr></table>
</td>
........
</tr>
<tr>
<td><........
</tr>
..........
</table>
求专家啊!
/// <summary>
/// 分页控件绑定方法,返回数据集
/// </summary>
/// <param name="myPager">分页控件</param>
/// <param name="sql">要分页的SQL语句</param>
/// <param name="cn">数据库连接串</param>
public DataTable myPageBind(Wuqi.Webdiyer.AspNetPager myPager,string sql,OracleX cn)
{
return(this.myPageBind(myPager,sql,mydata.Config.SysPageSize,cn));
}
/// <summary>
/// 分页控件绑定方法,返回数据集
/// </summary>
/// <param name="myPager">分页控件</param>
/// <param name="sql">要分页的SQL语句</param>
/// <param name="cn">数据库连接串</param>
public DataTable myPageBind(Wuqi.Webdiyer.AspNetPager myPager,string sql,int myPageSize,OracleX cn)
{
//求取记录总数
int mycount = Convert.ToInt32(cn.GetOneValue("select count(*) from (" + sql + ")"));
myPager.RecordCount = mycount; //定义分页数量
myPager.PageSize = myPageSize; //设置分页控件属性
//自定义信息存放位置
myPager.ShowCustomInfoSection = Wuqi.Webdiyer.ShowCustomInfoSection.Left;
//索引文本框显示方式
myPager.ShowInputBox = Wuqi.Webdiyer.ShowInputBox.Always;
//分页信息存放位置
myPager.HorizontalAlign = System.Web.UI.WebControls.HorizontalAlign.Right;
//显示几个页数
myPager.NumericButtonCount = 8;
//是否一定显示分页控件
myPager.AlwaysShow = true;
//使用页面提交方式
myPager.UrlPaging = false;
//不折行
myPager.Wrap = false;
//回到首页
myPager.FirstPageText = "<img src=" + this.MyImgPath() + "/home/firstg.gif border=0 title=\"转到首页\" onmouseover=\"this.src='" + this.MyImgPath() + "/home/firstn.gif'\" onmouseout=\"this.src='" + this.MyImgPath() + "/home/firstg.gif'\">";
//回到上一页
myPager.PrevPageText = "<img src=" + this.MyImgPath() + "/home/prevg.gif border=0 title=\"转到上一页\" onmouseover=\"this.src='" + this.MyImgPath() + "/home/prevn.gif'\" onmouseout=\"this.src='" + this.MyImgPath() + "/home/prevg.gif'\">";
//下一页
myPager.NextPageText = "<img src=" + this.MyImgPath() + "/home/nextg.gif border=0 title=\"转到下一页\" onmouseover=\"this.src='" + this.MyImgPath() + "/home/nextn.gif'\" onmouseout=\"this.src='" + this.MyImgPath() + "/home/nextg.gif'\">";
//最后页
myPager.LastPageText = "<img src=" + this.MyImgPath() + "/home/lastg.gif border=0 title=\"转到最后页\" onmouseover=\"this.src='" + this.MyImgPath() + "/home/lastn.gif'\" onmouseout=\"this.src='" + this.MyImgPath() + "/home/lastg.gif'\">"; //以下设定用户自定义记录信息
myPager.CustomInfoText = "第<font color='red'><b>" + myPager.CurrentPageIndex.ToString() +
"</b></font>页/共<font color='blue'><b>" + myPager.PageCount.ToString() +
"</b></font>页 每页<font color='blue'><b>" + myPager.PageSize.ToString() +
"</b></font>条/共<font color='blue'><b>" + myPager.RecordCount.ToString() +
"</b></font>条"; //根据分页数量绑定分页控件
return(cn.GetDt(sql,(myPager.PageSize * (myPager.CurrentPageIndex - 1)), myPager.PageSize));
}#endregion 结束分页控件
注意事项:
1.cn.GetOneValue:这个是自己写的根据SQL语句返回第一行第一列数据的一个方法
2.cn.GetDt:如下:
/// <summary>
/// 根据开始记录号和欲显示的记录条数生成DataTable
/// </summary>
/// <param name="sql">传递SQL语句</param>
/// <param name="p_start">开始记录号</param>
/// <param name="p_rowCount">欲显示的记录条数</param>
/// <returns>返回DataTable</returns>
public DataTable GetDt(string sql, int p_start, int p_rowCount)
{
OracleDataAdapter myAdp = new OracleDataAdapter(sql, this.cn);
DataSet ds = new DataSet();
try
{
myAdp.Fill(ds,p_start, p_rowCount, "MyPageDataTable");
return(ds.Tables[0]);
}
catch(OracleException ex)
{
throw ex;
}
}3.数据库是oracle,你如果不同可自行修改部分代码即可.
就象csdn中的Blog的分页一样也不用什么控件,连一个Table都没有,就是使用css控制数据的显示。