.Net源码论坛 [ 繁体中文 ]

发新话题 回复该主题

51Aspx第四期在线答疑活动实录(5-27) [复制链接]

楼主
主持人(***)13:51:06
51Aspx免费答疑活动即将开始,下面是活动规则,请大家务必遵守:

1、活动中,请用户QQ务必是在线状态,否则可能会被请出该群
2、活动中用户不得与专家私聊,一旦遭到专家投诉,也会请出该群
3、用户完全是按照加入此群的顺序来提问的, 主持人可提示用户提问次序,如活动结束后如果仍有提问者尚未提问,欢迎参加下期活动
4、提问前请做好充分准备,想好自己的问题(与.net相关的实战性问题最佳),不应提问源码问题,过于浪费时间!
5、51aspx站务相关的问题请与工作人员联系,不在该活动范围之内,不得提与活动无关的问题
6、若有人提问,则其他人不得发言, 警告一次后仍不遵守规定的用户可能将请出
7、如对专家们有意见或建议,请联系主持人,切勿在此群占用活动时间乱发言影响答题效率

主持人(***)14:00:02
用户1提问
用户1(***)14:00:07
网站是全站静态化的,如果要实现全站搜索的话,应该怎样去实现?(每张表的结构都不一样,也不是关系型的表,如果写多表查询的话,会很相应速度,有没有更优的结局方案)
专家H(***)14:01:44
可以用SQLServer的全文索引功能啊
用户1(***)14:02:24
不太明白,还请专家可以大概讲解
专家D(***)14:02:52
使用 lucene.net做搜索!很简单!在使用盘古分词!网上有很多教程!
用户1(***)14:03:22
恩,好的!  
用户1(***)14:03:45
第二个问题,后台文章系统怎样实现定时自动保存技术, 我初步的想法是js + ajax( var xml = new ActiveXObject ("Microsoft.XMLHTTP"); ) 但是有个问题是在IE浏览器下是没有问题,如果在火狐浏览器下有的时候是不支持的,应该怎么解决?
专家N<***>14:06:43
@用户1
肯定是要用AJAX。
自己写的AJAX库不兼容的话你可以考虑一下用JQUERY或YUI这样的库
专家D(***)14:06:53
可能是js兼容性问题!建议使用成熟的框架
用户1(***)14:07:50
问题三: 利用cookies  和  ajax   怎样记录每个用户对网站浏览历史记录(请大概讲一下实现原理)
专家H(***)14:08:29
第一个问题可以用全文索引功能,具体是什么原理,怎么用最好是去网上搜索一下相关的东西;
第二个问题,用ajax的话,如果自己写ajax有困难可以用js库,如jquery extjs等,这些库都考虑到了浏览器兼容问题
专家D(***)14:08:59
用cookies实现这个功能应该不现实!因为一个cookies的最大限制是4kb
用户1(***)14:09:51
请问,还有别的方法吗?如果用Session的话,是不是要在数据库里面做记录?
专家I<***>14:09:53
后台记录用户对页面的访问日志
专家I<***>14:10:09
保存在数据库
专家D(***)14:10:51
其实 使用iis日志就可以实现你的功能
专家D(***)14:11:04
iis上有详细的
用户1(***)14:11:23
恩,这是个很好的办法,我一会去看看教程
用户1(***)14:11:41
谢谢各位专家,技术的问题我问完了!
主持人(***)14:12:04
好的 请用户2提问
专家H(***)14:12:20
不知道你具体要实现什么样的功能,如果你是要记录用户的行为操作ajax一样也可以实现啊,也不用cookie
用户2(***)14:12:32
各位好,我从你们网站上下载了一个学生成绩管理系统,在运行过程中会出现如下错误
专家I<***>14:13:48
没有连接到数据库,检查连接字符串以及端口是否开放,服务是否启动
专家G(***)14:13:51
连接数据能否确定有问题
专家I<***>14:14:30
应该要配置2005的管理选项
用户2(***)14:14:37
服务器已经启动的了
专家G(***)14:15:14
TCP/IP是否支取
用户2(***)14:15:32
这两部分也已经配置过了   但是还是会出现那个问题
专家I<***>14:16:00
连接字符串呢
专家C(***)14:16:05
你的连接字符串应该有问题
专家C(***)14:16:18
查看你的程序里怎么配置的
用户2(***)14:16:28
请问连接字符串在哪找呢?
专家I<***>14:16:51
web.config
用户2(***)14:17:57
可以详细说下在web.config中找到后该如何修改吗
专家I<***>14:20:26
你先把连接贴出来看看
专家C(***)14:20:45
修改对应的主机名,SA 用户密码等
用户2(***)14:21:40
请稍等   我把web.config截图贴出来吧
专家C(***)14:25:19
你的Data Source要改. password要改
专家C(***)14:25:35
你的SQL SERVER 应该是EXPRESS版的
用户2(***)14:25:41
是的  
专家G(***)14:25:43
端口对不对
用户2(***)14:25:59
就修改那两部分吗?
专家C(***)14:26:03
端口我想肯定没问题.
专家C(***)14:26:09
是啊.  
专家F(***)14:26:14
改成本地主机名称
专家C(***)14:26:15
./SQLExpress
专家C(***)14:26:30
确认密码是否是sa
专家H(***)14:26:53
看你的数据库是装的VS自带的SQLEXPRESS  所以要改成data source=./sqlexpress
专家I<***>14:27:06
我想你是没有配置过这里的数据库信息吧?
用户2(***)14:27:49
是不是就修改data source   和password   就可以吗
用户2(***)14:28:23
我装的是VS2005 和  SQL2005呀
专家I<***>14:28:34
user id= 这里是数据库用户
专家I<***>14:28:53
3个地方,主机,用户名和密码
专家G(***)14:29:17
远程看一下不就可以了
用户2(***)14:29:23
那请问我应该怎样去改呢?
专家C(***)14:29:33
最后确定自己打开了SA用户
专家F(***)14:30:35
<add name="con" connectionString="server=113.31.27.107;database=shop;uid=sa;pwd=zx;"/>
专家F(***)14:30:43
这样写就可以
专家C(***)14:31:01
他是express版的
用户2(***)14:31:11
对的。。
专家T(***)14:31:18
\实例名
专家F(***)14:31:36
D4201E5A4DB1403\SQLEXPRESS
专家T(***)14:31:42
如果不是默认实例 ip\实例名
专家G(***)14:31:54
也有可能
专家F(***)14:32:04
前边写主机名或IP
专家G(***)14:32:09
T的有可能对的
专家K<***>14:32:27
是单独装的SQL 还是VS2005 带的EXPRESS
用户2(***)14:32:37
单独装的
用户2(***)14:32:41
不是自带的
专家K<***>14:33:01
是否有装SQL2000
专家G(***)14:33:11
你把你的SQL界面打开看一下
用户2(***)14:33:18
是SQL2005
用户2(***)14:33:34
请问是哪个界面  ?
专家K<***>14:33:40
我知道是SQL2005 你还装过SQL2000吗》?
用户2(***)14:33:41
刚启动的吗
用户2(***)14:33:48
没有
用户2(***)14:34:09
就装了SQL2005和它的一个补丁啊
专家H(***)14:34:11
你刚才的截图里可显示的是SQLEXPRESS版本的
专家K<***>14:34:18
哦 那用户启动了 服务启动了 应该是没问题的 仔细检查下
用户2(***)14:34:30
都启动了呀。
专家K<***>14:35:28
如果不行 可以采用远程,或者源代码共享 给你解决
专家K<***>14:35:37
这种问题真的是不好说!
专家K<***>14:36:02
我认为就是个设置的问题
用户2(***)14:36:28
那我把下载的那个源代码共享下吧
专家G(***)14:36:37
呵呵
专家K<***>14:36:49
吧数据库什么都带上
专家K<***>14:37:12
主持人可以下一个了
用户2(***)14:37:15
好   打包好解压缩下就可以了
用户2 共享文件 1 个 14:37:40
用户10<***>14:38:21
大家好
用户10<***>14:38:40
三层音乐网站源码怎样调试呀
专家F(***)14:39:19
你能帮再说明白一点吗
专家T(***)14:39:26
放在同一个解决方案下
用户10<***>14:40:04
我把下载后的代码解压缩后用vs2008打开
专家F(***)14:40:24
你是想把把他放在同一项目里面还是只想看看程序代码
用户10<***>14:40:39
重新生成解决方案报错
专家I<***>14:41:02
什么错?
专家S<***>14:41:05
错误原因是什么?
专家K<***>14:41:08
源代码 编译不通过
专家T(***)14:41:18
是08的项目嘛?
专家F(***)14:42:28
你先清空解决方案了吗
专家F(***)14:42:39
再生成
专家K<***>14:42:50
这种问题都是不可控的问题!
用户10<***>14:42:59
是的
用户10<***>14:43:15
怎么清空
专家K<***>14:43:17
没去看过那个源码 没调试更本就没法给出答案
专家I<***>14:43:44
错误截个图来看看
专家K<***>14:43:49
不知道 是你那边的错误 还是源码本身就有问题
专家K<***>14:44:16
我建议是放在论坛讨论区里面去讨论
专家S<***>14:44:23

专家K<***>14:44:44
相关关注此源代码的人 一定会给出解答
专家S<***>14:44:53
某些项目路径不对
专家F(***)14:45:14
可能是类库文件路径错误
用户10<***>14:45:17
那好吧我再试试
专家K<***>14:45:18
估计是SLN 是绝对路劲 不是相对的
专家F(***)14:46:08
你用记事本打开现在的解决方案!。写进去相对路径
专家K<***>14:47:40
主持人他问完了
主持人(***)14:48:22
请问用户10提问完毕了吗?
主持人(***)14:48:32
用户3提问
用户3<***>14:48:49
各位好ataset与数据库交换问题:
专家F(***)14:49:04
什么问题
用户3<***>14:49:04
dataset 中有两个表,第一个表中一条记录,第二个表有多条记录。想将两个表中的数据都存到数据库中
(要求:如果dataset中存在数据库中的数据就不导入,如果修改了就将修改后的数据导入,dataset没有的数据而数据库有,就将数据删除)
主持人(***)14:50:16
用户3 请稍等 活动进入休息时间  
主持人(***)14:50:31
下半场将于15:10开始  
主持人(***)14:50:41
休息期间大家可以自由讨论
分享 转发
TOP
沙发

接上。。

主持人(***)15:09:22
活动开始  
主持人(***)15:10:12
用户3提问
用户3<***>15:10:11
dataset 中有两个表,第一个表中一条记录,第二个表有多条记录。想将两个表中的数据都存到数据库中
(要求:如果dataset中存在数据库中的数据就不导入,如果修改了就将修改后的数据导入,dataset没有的数据而数据库有,就将数据删除)
专家G(***)15:10:24
获得dateset行值的状态
用户3<***>15:10:47
什么状态啊
专家G(***)15:11:02
删除行的,或者新增行的
用户3<***>15:11:26
要一个字标记吗
用户3<***>15:11:55
是一个字段标记
用户3<***>15:12:34
获取状态后呢
专家G(***)15:12:54
稍等
专家F(***)15:13:35
循环ID值进行数据库插入
用户3<***>15:14:03
但是dataset中有多个表啊
专家S<***>15:14:16
把两个表合并成一个
专家S<***>15:14:31
前提是要两个表同样结构
用户3<***>15:15:06
dataset中的两个表不一样的
用户3<***>15:15:19
一个是明细表,一个是主表
专家F(***)15:15:27
也就是说dataset里面有多个datatable!
专家G(***)15:15:28
DataSet dsModified = ds.GetChanges(DataRowState.Modified);//获取修改过的行
DataSet dsDeleted = ds.GetChanges(DataRowState.Deleted);//获取标记为删除的行
DataSet dsAdded = ds.GetChanges(DataRowState.Added);//获取增加的行
专家V<***>15:15:50
另外建立一个对象,搞成一样,或者你把这2个表组合成一个表。
专家V<***>15:16:35
用户3<***>  15:15:19
一个是明细表,一个是主表

说明两者是有关联字段的吧。联合起来,组成一个对象,然后对对象进行你说的逻辑操作。
用户3<***>15:16:33
我用一个这个组件: Microsoft.Practices.EnterpriseLibrary.Data
但是有问题了
用户3<***>15:17:28
问题是:只能修改
专家G(***)15:18:13
用上面的不可以吗
主持人(***)15:19:14
用户3 您使用上面专家的方法试试可以吗?
用户3<***>15:19:55
DataSet dsModified = ds.GetChanges(DataRowState.Modified);//获取修改过的行
DataSet dsDeleted = ds.GetChanges(DataRowState.Deleted);//获取标记为删除的行
DataSet dsAdded = ds.GetChanges(DataRowState.Added);//获取增加的行
这样后怎么和数据库连接啊
专家G(***)15:20:42
你先连接数据库,在后台先形成dataset,在对这个表处理
专家G(***)15:21:00
有了表就可以查数据库里写了
主持人(***)15:22:51
用户3您现在明白了吗?
用户3<***>15:22:50
也就是说有了两个dataset了,
用户3<***>15:23:21
不太明白
专家G(***)15:23:26
分解成3个dataset,一个ds分解成6个表
专家G(***)15:23:53
原始的dataset不是有两个表吗
用户3<***>15:23:59
是的
专家G(***)15:24:11
一个分解之后形成3个ds
用户3<***>15:24:17
分解后再连接数据库啊
专家G(***)15:24:25
一个ds分解成2张表
专家G(***)15:24:40
这些和数据库连接没有关系,在内存中完成
用户3<***>15:24:42

专家G(***)15:24:59
得到表之后你就可以处理
用户3<***>15:25:12
在内存里做完这操作后呢
专家G(***)15:25:23
你就得到不同的表了
用户3<***>15:25:30
是的
专家G(***)15:25:40
根据表中的字段可以在对数据库操作
专家G(***)15:26:11
比如删除,可以根据删除的表中内容循环删除数据库的
用户3<***>15:26:23
再循环对数据库操作
用户3<***>15:26:50
哦!  
主持人(***)15:27:29
用户3 提问完毕
主持人(***)15:27:42
用户9提问
用户9(***)15:27:50
我想用asp.net做一个留言版,如何实现五分钟内同一个人不能重复留言
专家C(***)15:29:12
记录一下他最后发言时间
用户9(***)15:29:42
用什么实现呢
专家T(***)15:29:49
判断离最后发言时间时间是否超过5分钟
专家C(***)15:29:47
每次发言的时候判断一下是否间隔.
专家C(***)15:30:24
假如你定义了一个User类. User类有一个属性 来记录 它
专家G(***)15:30:24
前台计时或者后太数据库设置记录时间
用户9(***)15:30:37
用JS语言实现的吗
专家C(***)15:30:44
每次发言的时候更新一下.
专家G(***)15:30:51
就像注册阅读文件,可以倒计时那样子
专家F(***)15:30:56
查询同一个IP的最后一条数据拿当前时间减去上一次插入数据库时间!
用户9(***)15:31:27
写入数据库?
专家S<***>15:31:31
用JS做不好,写程序吧,如果同一IP,同一Session,5分钟不能留言
专家C(***)15:31:53
我觉得还是写到一个类的属性比较好.
专家F(***)15:31:54
不需要用Session
专家G(***)15:31:54
那不可能,只是User不是IP
专家S<***>15:31:54
当然写入数据库了,要不怎么留言
专家C(***)15:32:26
那每次都要去数据库取,多麻烦
用户9(***)15:32:29
能不能说的具体一点
专家F(***)15:32:31
TimeSpan ts = DateTime.Now - Convert.ToDateTime(list[0].Adddate);
                int iCount = Convert.ToInt16(ts.TotalMinutes);
                int iConnt1 = Convert.ToInt16(ts.TotalDays);
                int iConnt2 = Convert.ToInt16(ts.TotalHours);
                if (iConnt1 == 0 && iConnt2 == 0 && iCount < 5 && list[0].Ip == ip)
                {
                    Response.Write(Public.msg("5分钟之内不能连续留言", "message.aspx"));
                }
专家F(***)15:32:39
用这个
专家T(***)15:32:52
或者用cache
专家F(***)15:32:52
刚给你写的测试了绝对没问题

用户9(***)15:33:00
好的  谢谢专家F
专家S<***>15:33:17
先在前台用JS判断一下,提交上去的数据再判断一次就可以了
专家S<***>15:33:36
5分钟内让提交按钮不能用
主持人(***)15:34:02
请问用户9 明白专家们的解答了吗?
主持人(***)15:34:29
好的 请用户11提问
用户11(***)15:34:39
到我了吧,谢谢
用户11(***)15:34:54
我的问题可能很幼稚,各位老师不要见笑哟
专家T(***)15:35:22
呵呵,看到你这句话就想笑
用户11(***)15:35:21
我做了一个网页,想根据用户输入或选择进行查询数据
用户11(***)15:36:05
但我把SQL语句写到Button里面,为什么Gridview里的第2页及以后的页没有数据呢
用户11(***)15:36:23
但如果把SQL语句写到PageLoad里却没有 这个问题
专家I<***>15:36:39
gridview要设置分页
用户11(***)15:36:56
我设置了分页
用户11(***)15:37:05
也能显示1、2、3.。。等
用户11(***)15:37:16
但点击了以后显示空白,而实际是有数据的
专家S<***>15:37:17
SQL语句写到Button里面后,你在第二面有没有点击BUTTON?
用户11(***)15:37:54
我是点一下Button,查询出多页的数据,但只能看第一页的数据
专家I<***>15:37:53
截图来看看
用户11(***)15:38:03
好,稍等  
用户11(***)15:38:48
我的电脑有点慢,耽误大家的时间,不好1S
主持人(***)15:40:16
专家们辛苦了  
用户11(***)15:42:37
这是我把语句放到PageLoad里执行的结果
用户11(***)15:42:49
现在可以选择第2页,也有数据
专家I<***>15:43:33
gridview有pageindexchange事件
专家G(***)15:43:35
你把函数放到pageload里可以放到查询里不行?
专家G(***)15:43:54
其他的没有改变是吗
用户11(***)15:44:00

用户11(***)15:43:57
专家L(***)15:44:11
ispostback ?
用户11(***)15:44:14
刚才这个图是我点了查询以后显示的第1页
用户11(***)15:44:57
但如果我点第二页会回来刚开始的第2页,而不是我现在条件查询出来的第二页,
也就是说,点第2页时,我的条件没起到作用
专家L(***)15:45:24
代码 贴出来瞅瞅
用户11(***)15:45:29
不好1S,IsPostBack我还不知道什么意思,只是见别人的代码里有用过
专家L(***)15:45:43
是否是第一次加载
专家S<***>15:45:47
IsPostBack就是回发的时候是否执行
专家S<***>15:46:00
if (!Page.IsPostBack)
        {}
用户11(***)15:46:14
    protected void Page_Load(object sender, EventArgs e)
    {
       SqlDsrSearch.ConnectionString = ConfigurationManager.ConnectionStrings["new"].ConnectionString;
       SqlDsrDetail.ConnectionString = ConfigurationManager.ConnectionStrings["new"].ConnectionString;

       SqlDsrSearch.SelectCommand = "Select hjgldm,jzgldm,fnbm,fnxm,fncsrq,zfxm,zfcsrq from jbqk where fnxm like '%李晓%'";
        GridView1.DataSourceID = SqlDsrSearch.ID;
       GridView1.DataBind();
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        String str = "Select d.dwmc as 村庄,fnbm as 妇女编码,fnxm as 女方姓名,
                            fncsrq as 女方出生,zfxm 男方姓名,zfcsrq as 男方出生 from jbqk j "
          + " Left join dwdm d on d.dwdm = j.hjgldm Left join dwdm e on e.dwdm = j.jzgldm "
          + " where 1=1 ";              
        if(DropDownList1.SelectedIndex >0)
            str += " and left(hjgldm,12) = '"+DropDownList1.SelectedValue+"'";
        if (txtFnxm.Text != "")
            str += " and fnxm like '%" + txtFnxm.Text + "%'";
        if (txtZfxm.Text != "")
            str += " and zfxm like '%" + txtZfxm.Text + "%'";
        if (txtFnbm.Text != "")
            str += " and fnbm ='" + txtFnbm.Text + "'";
        SqlDsrSearch.SelectCommand = str;
    }
用户11(***)15:46:21
就是这两段代码
专家I<***>15:47:41
要在gridview的pageindexchange事件里指定gridview的当前页码,然后再绑定数据
用户11(***)15:48:36
请具体说一下,谢谢
专家T(***)15:48:46
如果用了sqldatascource或者其他datasource 根本不用写翻页代码
用户11(***)15:49:02
我用的是SQLDATASOURCE
专家G(***)15:52:40
       SqlDsrSearch.SelectCommand = "Select hjgldm,jzgldm,fnbm,fnxm,fncsrq,zfxm,zfcsrq from jbqk where fnxm like '%李晓%'";
        GridView1.DataSourceID = SqlDsrSearch.ID;
       GridView1.DataBind(); 放到button下面实验一下看看是不是也不行了
用户11(***)15:54:36
还是不地
用户11(***)15:54:39
不行
用户11(***)15:54:48
点第2页又空白了
用户11(***)15:55:15
刚点“查询”是有第1页数据的,但如果点“2”就空白了,就没有数据了
专家L(***)15:56:01
你这句话在数据库里 返回几条数据?Select hjgldm,jzgldm,fnbm,fnxm,fncsrq,zfxm,zfcsrq from jbqk where fnxm like '%李晓%'
用户11(***)15:57:39
没数过
专家L(***)15:57:48
  不用数
专家L(***)15:58:03
看消息就行了
用户11(***)15:58:47
不到50条
用户11(***)15:58:52
48条左右吧
主持人(***)16:00:06
不好意思用户11
用户11(***)16:00:29
好,有人单独帮我也行,谢谢
主持人(***)16:00:31
活动结束时间到了
用户11(***)16:00:40

主持人(***)16:00:57
本期活动结束 感谢大家积极参与,
没有得到回复的 敬请期待下期活动,
聊天记录整理后将发帖到论坛【站内活动、公告】区,大家敬请关注
此群将被清退 ,欢迎用户下期活动加入!下期活动再见!
TOP
发新话题 回复该主题