【Linux】proftpd mysql 配置

Continue Read..

1.首先下载proftpd  

2.放到服务器指定的目录   /cuzn/

然后解压    tar -jxvf proftpd-1.3.4b

解压之后打开

改动一个文件:contrib/mod_sql_mysql.c
找到#include  把他改为你实际路径:
如果你的mysql 安装在 /usr/local/mysql 下,

就把它修改为#include "/usr/local/mysql/include/mysql/mysql.h"

然后

./configure --prefix=/usr/local/proftpd --with-modules=mod_sql:mod_sql_mysql --with-include=/usr/local/mysql/include/mysql --with-libraries=/usr/local/mysql/lib/mysql

编译,安装:
make 

make install


创建配置文件:
(1)使用mod_sql配置文件:
cd /usr/local/proftpd/etc
mv proftpd.conf proftpd.bak      //先备份之前的

cp /root/proftpd-1.3.0/sample-configurations/mod_sql.conf proftpd.conf //复制mysql验证用户的配置文件


重配置  /usr/local/proftpd/etc    该文件我传附件了..很多

启动  /usr/local/proftpd/sbin/proftpd


创建mysql

数据库传附件    把数据库穿到服务器指定目录

ssh   进入数据库

 /usr/local/mysql/bin/mysql -uroot -p123456


create database proftpd; 创建库

usr  proftpd

导入表  source /xx/1.sql;


// 增加一个组ID为2010的ftpgroup组和用户,在mysql里面创建账号的时候,用这个ID groupadd -g 2010 ftpgroup 
useradd -u 2010 -s /bin/false -d /liuxun/null -c "proftpd user" -g ftpgroup -r ftpuser

 

mysql> INSERT INTO `ftpusers` VALUES ('user1', '123456', 2010, 2010, '/home/test', '/sbin/nologin',0,'','');  mkdir /home/user1

chmod 777 /home/user1

创建用户

 

最后  我proftpd  里面设置的端口是2021  和主动被动端口  这里需要在防火墙里面添加 

还要开启22端口   

 

 

 

 

尼玛  时隔2年重新配置的时候出了一堆问题

我在写下操作过程吧

 

./configure  

--prefix=/usr/local/proftpd  

--with-modules=mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql:mod_ratio  

--with-includes=/usr/local/mysql/include/mysql  

--with-libraries=/usr/local/mysql/lib 

make  

make install  

说明: 
--with-modules=mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql  
这句是让编译ProFTPD 支持MySQL的模块,并有磁盘限额支持; 
--with-includes=  
这是来指定MySQL服务器includes所在的位置;在这里我设置的是/usr/include/mysql,因为我的MySQL服务器的includes的确在这个目录;你可以根据自己的机器环境来调整; 
--with-libraries= 
这是来指定MySQL服务器libraries所在的位置;在这里我设置的是/usr/lib/mysql,因为我的MySQL服务器的libraries的确在这个目录;你可以根据自己的机器环境来调整; 
--prefix=  
这是用来指定要把ProFTPD安装在哪个位置,在这里我把ProFTPD安装在了 /usr/local/proftpd 目录下,您不必自己建目录 /usr/local/proftpd ,在安装的时候这个目录会自动生成;当然您也可以自己来指定ProFTPD的安装位置;当我们不需要proftpd的时候,就可以直接删除proftpd目录;这样做好象是有点方便; 

创建Proftpd启动脚本 
cp contrib/dist/rpm/proftpd.init.d /etc/rc.d/init.d/proftpd 
vi /etc/rc.d/init.d/proftpd 
找到PATH="$PATH:/usr/local/sbin"这一句 
将它改成PATH="$PATH:/usr/local/proftpd/sbin" 

chmod 755 /etc/rc.d/init.d/proftpd 



创建用户组和用户之后  要给最后指向的目录设置到这个组

比如

chown -R ftpuser.ftpgroup /cuzn    这个是ftpgroup组下的ftpuser用户可以访问cuzn这个文件夹







[font=Courier New]1、什么是ProFTPD;ProFTPD 是一个FTP服务器程序,和vsftpd、wuftp 类似的FTP服务器,他们最终实现功能和目的都是一样的,都是为了传输文件; 
2、ProFTPD的下载 
proftpd-1.2.9.tar.gz 
proftpd-mod-quotatab-1.2.11.tar.gz 
[color=Red](注意:如果你的mysql是自编译安装的,请先别忙着安装,请至本文最后,看完补充再装也不迟)[/color] 

3、ProFTPD的编译和安装; 
tar zvxf proftpd-1.2.9.tar.gz 
tar zvxf proftpd-mod-quotatab-1.2.11.tar.gz 
cp mod_quotatab/*.c proftpd-1.2.9/contrib/ 
cp mod_quotatab/*.h proftpd-1.2.9/contrib/ 
cd proftpd-1.2.9 
./configure  
--prefix=/usr/local/proftpd  
--with-modules=mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql:mod_ratio  
--with-includes=/usr/include/mysql  
--with-libraries=/usr/lib/mysql 
make  
make install 

说明: 
--with-modules=mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql  
这句是让编译ProFTPD 支持MySQL的模块,并有磁盘限额支持; 
--with-includes=  
这是来指定MySQL服务器includes所在的位置;在这里我设置的是/usr/include/mysql,因为我的MySQL服务器的includes的确在这个目录;你可以根据自己的机器环境来调整; 
--with-libraries= 
这是来指定MySQL服务器libraries所在的位置;在这里我设置的是/usr/lib/mysql,因为我的MySQL服务器的libraries的确在这个目录;你可以根据自己的机器环境来调整; 
--prefix=  
这是用来指定要把ProFTPD安装在哪个位置,在这里我把ProFTPD安装在了 /usr/local/proftpd 目录下,您不必自己建目录 /usr/local/proftpd ,在安装的时候这个目录会自动生成;当然您也可以自己来指定ProFTPD的安装位置;当我们不需要proftpd的时候,就可以直接删除proftpd目录;这样做好象是有点方便; 

创建Proftpd启动脚本 
cp contrib/dist/rpm/proftpd.init.d /etc/rc.d/init.d/proftpd 
vi /etc/rc.d/init.d/proftpd 
找到PATH="$PATH:/usr/local/sbin"这一句 
将它改成PATH="$PATH:/usr/local/proftpd/sbin" 
chmod 755 /etc/rc.d/init.d/proftpd 

4.建立相应的用户和用户组 
groupadd -g 5500 ftpgroup 
adduser -u 5500 -s /bin/false -d /bin/null -c "proftpd user" -g ftpgroup ftpuser 

5、ProFTPD认证中的MySQL数据库 
引用:mysql -uroot -ppassword 
create database ftpdb; 
grant select, update on ftpdb.* to proftpd@localhost identified by 'password'; 
use ftpdb; 

CREATE TABLE `ftpgroup` ( 
`groupname` varchar(16) NOT NULL default '', 
`gid` smallint(6) NOT NULL default '5500', 
`members` varchar(16) NOT NULL default '', 
KEY `groupname` (`groupname`) 
) TYPE=MyISAM COMMENT='ProFTP group table'; 

INSERT INTO `ftpgroup` VALUES ('ftpgroup', 5500, 'ftpuser'); 

CREATE TABLE `ftpquotalimits` ( 
`name` varchar(30) default NULL, 
`quota_type` enum('user','group','class','all') NOT NULL default 'user', 
`per_session` enum('false','true') NOT NULL default 'false', 
`limit_type` enum('soft','hard') NOT NULL default 'soft', 
`bytes_in_avail` float NOT NULL default '0', 
`bytes_out_avail` float NOT NULL default '0', 
`bytes_xfer_avail` float NOT NULL default '0', 
`files_in_avail` int(10) unsigned NOT NULL default '0', 
`files_out_avail` int(10) unsigned NOT NULL default '0', 
`files_xfer_avail` int(10) unsigned NOT NULL default '0' 
) TYPE=MyISAM; 

CREATE TABLE `ftpquotatallies` ( 
`name` varchar(30) NOT NULL default '', 
`quota_type` enum('user','group','class','all') NOT NULL default 'user', 
`bytes_in_used` float NOT NULL default '0', 
`bytes_out_used` float NOT NULL default '0', 
`bytes_xfer_used` float NOT NULL default '0', 
`files_in_used` int(10) unsigned NOT NULL default '0', 
`files_out_used` int(10) unsigned NOT NULL default '0', 
`files_xfer_used` int(10) unsigned NOT NULL default '0' 
) TYPE=MyISAM; 

CREATE TABLE `ftpuser` ( 
`id` int(10) unsigned NOT NULL auto_increment, 
`userid` varchar(32) NOT NULL default '', 
`passwd` varchar(32) NOT NULL default '', 
`uid` smallint(6) NOT NULL default '5500', 
`gid` smallint(6) NOT NULL default '5500', 
`homedir` varchar(255) NOT NULL default '', 
`shell` varchar(16) NOT NULL default '/sbin/nologin', 
`count` int(11) NOT NULL default '0', 
`host` varchar(30) NOT NULL default '000-000-000-000', 
`lastlogin` datetime NOT NULL default '0000-00-00 00:00:00', 
PRIMARY KEY (`id`) 
) TYPE=MyISAM COMMENT='ProFTP user table';




6.ProFTPD的配置文件proftpd.conf  
vi /usr/local/proftpd/etc/proftpd.conf 
引用:ServerName      "ProFTPD Default Installation" 
ServerType      standalone 
ServerAdmin                     [email]myunix@hotmail.com[/email] 
DefaultServer      on 
Port        21 
Umask        022 
# 注最多30个ip同时登录使用ftp; 
MaxInstances      30 
# 设置最大的尝试登陆的次数,如果超过自动断开连接 
MaxLoginAttempts                5 
# 设置运行Proftpd服务的系统用户和组 
 User        nobody 
 Group        nobody 
# 匿名用户 这里不使用,前面加"#"注消 
#  
#   User        ftp 
#   Group        ftp 
# 删除了anonymous登录的设置 

 AllowOverwrite on 

# 最大的用户数 
MaxClients      100 
# 服务器的欢迎信息 
DisplayLogin      welcome.msg 
DisplayFirstChdir    .message 
# 连接时的MSG 
DisplayConnect /usr/local/proftpd/etc/connect.msg 
DisplayGoAway /usr/local/proftpd/etc/goway.msg 
# 输入quit命令后的MSG 
DisplayQuit /usr/local/proftpd/etc/quit.msg 
MaxHostsPerUser 1 
MaxClientsPerUser 2 
# 对不起,一个IP只允许一个连接 
MaxClientsPerHost 1 

RootLogin off 
RequireValidShell off 
UseReverseDNS     off 
IdentLookups      off 
TimeoutStalled    600 
TimeoutLogin      900 
TimeoutIdle       600 
TimeoutNoTransfer 600 
# 让proftp支持现在流行的FXP传输方式,默认是不支持的 
AllowForeignAddress on 
# 端口也可自己指定 
PassivePorts 49152 65534 
# 允许断点续传是默认支持的,不用设置 
# 这里有一个技巧,你可以控制FTP中任一个目录有"断点续传"的功能,请设置下面一行,(例:) 

AllowStoreRestart      on 
AllowRetrieveRestart   on 

# 屏蔽服务器版本信息 
ServerIdent off 
# 设置ftpuser组只能访问自己的目录 
DefaultRoot ~ ftpgroup 

#-------- load sql.mod for mysql authoritative --------# 
# Backend表示用户认证方式为MySQL数据库的认证方式  
# Plaintext表示明文认证方式,排在最前面的为最先使用的方式 
SQLAuthTypes Backend Plaintext 
# 数据库的鉴别 
SQLAuthenticate users* groups* 
# 数据库联接的信息 
# ftpdb是数据库名,localhost是主机名 
# proftpd是连接数据库的用户名,password是密码 
#(如果没有密码留空) 
SQLConnectInfo ftpdb@localhost proftpd password 
# 指定用来做用户认证的表的有关信息 
SQLUserInfo ftpuser userid passwd uid gid homedir shell 
SQLGroupInfo ftpgroup groupname gid members 
# 如果用户主目录不存在,则系统会根据此用户在用户数据表中的homedir字段的值新建一个目录 
SQLHomedirOnDemand on 
SQLNegativeCache   on 
# Update count every time user logs in 
SQLLogFile /var/log/proftpd.sql.log 
SQLNamedQuery getcount SELECT "count from ftpuser where userid='%u'" 
SQLNamedQuery getlastlogin SELECT "lastlogin from ftpuser where userid='%u'" 
SQLNamedQuery updatelogininfo UPDATE "count=count+1,host='%h',lastlogin=current_timestamp() WHERE userid='%u'" ftpuser 
SQLShowInfo PASS "230" "You've logged on %{getcount} times, last login at %{getlastlogin}" 
SQLLog PASS updatelogininfo 
#-------- load sql.mod for mysql authoritative --------#  

#-------- load qudes.mod for Quota limit --------# 
#打开磁盘限额引擎 
QuotaEngine on 
# 设置磁盘限额 
QuotaDirectoryTally on 
# 设置磁盘容量显示时的单位 
QuotaDisplayUnits Mb 
# 允许显示磁盘限额信息,ftp登录后可执行quote site quota命令查看当前磁盘使用情况 
QuotaShowQuotas on 
# 设置磁盘限额日志文件 
QuotaLog "/var/log/proftpd.quota.log" 
# 指定磁盘限额模块使用的数据库信息 
SQLNamedQuery get-quota-limit SELECT "name, quota_type, per_session, limit_type, bytes_in_avail, \ 
bytes_out_avail, bytes_xfer_avail, files_in_avail, files_out_avail, files_xfer_avail FROM ftpquotalimits \ 
WHERE name = '%{0}' AND quota_type = '%{1}'" 
SQLNamedQuery get-quota-tally SELECT "name, quota_type, bytes_in_used, bytes_out_used, \ 
bytes_xfer_used, files_in_used, files_out_used, files_xfer_used FROM ftpquotatallies \ 
WHERE name = '%{0}' AND quota_type = '%{1}'" 
SQLNamedQuery update-quota-tally UPDATE "bytes_in_used = bytes_in_used + %{0}, \ 
bytes_out_used = bytes_out_used + %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, \ 
files_in_used = files_in_used + %{3}, files_out_used = files_out_used + %{4}, \ 
files_xfer_used = files_xfer_used + %{5} \ 
WHERE name = '%{6}' AND quota_type = '%{7}'" ftpquotatallies 
SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}" ftpquotatallies 
QuotaLimitTable sql:/get-quota-limit 
QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally 
#--------- load qudes.mod for Quota limit --------# 
# Logging options 
# Debug Level 
# emerg, alert, crit (empfohlen), error, warn. notice, info, debug 

SyslogLevel emerg 
SystemLog /var/log/proftpd.system.log 
TransferLog /var/log/proftpd.xferlog 
# Some logging formats 

LogFormat default "%h %l %u %t "%r" %s %b" 
LogFormat auth "%v [%P] %h %t "%r" %s" 
LogFormat write "%h %l %u %t "%r" %s %b" 
# Log file/dir access 
# ExtendedLog /var/log/proftpd.access_log WRITE,READ write 
# Record all logins 
ExtendedLog /var/log/proftpd.auth_log AUTH auth 
# Paranoia logging level.... 
ExtendedLog /var/log/proftpd.paranoid_log ALL default




service proftpd restart 

引用:mysql> DESCRIBE quotalimits; 
+------------------+------------------------------------+------+-----+---------+-------+ 
| Field            | Type                               | Null | Key | Default | Extra | 
+------------------+------------------------------------+------+-----+---------+-------+ 
| name             | varchar(30)                        | YES  |     | NULL    |       | 
| quota_type       | enum('user','group','class','all') |      |     | user    |       | 
| per_session      | enum('false','true')               |      |     | false   |       | 
| limit_type       | enum('soft','hard')                |      |     | soft    |       | 
| bytes_in_avail   | float                              |      |     | 0       |       | 
| bytes_out_avail  | float                              |      |     | 0       |       | 
| bytes_xfer_avail | float                              |      |     | 0       |       | 
| files_in_avail   | int(10) unsigned                   |      |     | 0       |       | 
| files_out_avail  | int(10) unsigned                   |      |     | 0       |       | 
| files_xfer_avail | int(10) unsigned                   |      |     | 0       |       | 
+------------------+------------------------------------+------+-----+---------+-------+



这个表里的各个参数分别代表: 
name 应该这样理解,既能表示单个用户,也能表示用户组名;如果我们在quota_type(限额类型)中使用group来认证的话,那就得在这里设置组名,这样整组都具有统一的磁盘限额的特性;当然您要在ftpgroups表中插入组纪录;并且在member字段中得把用户一个一个的列进去,这是后话了;先自己研究一下,只是插入纪录的事;我们只说最简单的单个用户的磁盘限额;默认值可以为空NULL,如果为空则针对所在有quota_type中设置的类型,比如在quota_type中设置为user ,就是针对所有ftpusers 中的用户起作用;如果是group名,也是对ftpgroups 所有组作用; 
quota_type 磁盘限额类型,可以设置为用户,也可以设置为用户组group ;如果您的name写的是用户组,那在这里就得设置为group来认定;默认为user认证; 
per_session 默认为false; 
limit_type 默认为soft; 
bytes_in_avail 用户占用空间大小,也就是家目录的空间最大可以让用户占用多少,单位是byte;默认为0,0是不受限制,以下同理; 
bytes_out_avail 注;所有下载文件的总和,默认为0; 
bytes_xfer_avail 注;一个用户上传下载流量总和,默认为0 
files_in_avail 注:限制上传文件总数,默认为0; 
files_out_avail 注;限制下载文件个数总计,默认为0 
files_xfer_avail 注:允许下载和上传的文件总和我,默认为0; 

在数据库ftpuser添加一个虚拟用户"test", 
mysql> insert into ftpuser (id,userid,passwd,uid,gid,homedir,shell) values ('1', 'test','test','5500','5500','/home/test','/sbin/nologin'); 

如果想删除一个用户,您可以用 MySQL的delete 指令;比如我想删除test这个用户; 
mysql> delete from ftpusers WHERE userid="test"; 

如果想更新一条用户纪录,比如test用户密码字段; 
mysql> update ftpuser set passwd="123456" where userid="test"; 

如果你想设置quota,只要在ftpquotalimits表里设置一下就行了 
我们比如想让test用户,约束空间大小为100M,其它不受限制;则可用下面的mysql命令添加; 
insert into ftpquotalimits (name,quota_type,per_session,limit_type,bytes_in_avail,bytes_out_avail,bytes_xfer_avail,files_in_avail,files_out_avail,files_xfer_avail) values ('test', 'user', 'true', 'soft', '104857600', '0','0','0','0','0'); 

运算公式: 
1Kb=1024 byte 
1M=1024 Kb 
100M=100x1024 Kb= 100x1024x1024 byte=104857600 byte  
注意:磁盘限额生效,必须让FTP用户重新登录才有效;比如test用户正在ftp上,这时要先退出,然后再登录,这是磁盘限额就有效了; 



7.设置ftp登陆欢迎信息文件: 
%T 目前的时间  
%F 所在硬盘剩下的容量  
%C 目前所在的目录  
%R Client 端的主机名称  
%L Server 端的主机名称  
%U 使用者帐户名称  
%M 最大允许连接人数  
%N 目前的服务器连接人数  
%E FTP服务器管理员的 email  
%i 本次上传的文件数量  
%o 本次下载的文件数量  
%t 本次上传+下载的文件数量 

vi /home/test/welcome.msg 


引用 
欢迎您%U,这是Frank的测试FTP服务器; 
目前时间是:%T; 
本服务器最多允许%M个用户连接数; 
目前服务器上已有%N个用户连接数; 
目前你所在的目录是%C; 
目录所在的硬盘还剩下%F字节。 





如果你的mysql是自编译的,需要按照以下补充,解决问题 
引用:补充: 
第3步前修改“/etc/ld.so.conf” 
vi /etc/ld.so.conf 
找到:/usr/lib/mysql 
改成:/usr/local/mysql/lib/mysql 
如果没有这一行,直接当一行 
然后方可安装第3步 

请重新指定mysql的lib及includes目录(例:我的mysql是安装在:/usr/local/mysql) 
./configure \ 
--prefix=/usr/local/proftpd \ 
--with-modules=mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql:mod_ratio \ 
--with-includes=/usr/local/mysql/include/mysql \ 
--with-libraries=/usr/local/mysql/lib/mysql 

以下列出安装mysql的三个错误,请对症下药 
1. 
make[1]: *** [mod_sql_mysql.o] Error 1 
make[1]: Leaving directory `/usr/local/file/proftpd-1.2.9/modules' 
make: *** [modules] Error 2 

vi contrib/mod_sql_mysql.c 
找到:#include   <.mysql.h>   貌似是这个文件  我懒得在去找了
改成:#include   </usr/local/xx/xx.mysql.h>   这里改成你自己的mysql目录下的mysql.h文件

2.如果按上面的方法修改仍然有同样的错误,需修改 
make[1]: *** [mod_sql_mysql.o] Error 1 
make[1]: Leaving directory `/usr/local/file/proftpd-1.2.9/modules' 
make: *** [modules] Error 2 

vi contrib/mod_sql_mysql.c 
找到:1293行 
把:make_scrambled_password(scrambled, c_clear, 1, NULL); 
改成:make_scrambled_password(scrambled, c_clear); 

3. 
/usr/bin/ld: cannot find -lmysqlclient 
collect2: ld returned 1 exit status 
make: *** [proftpd] Error 1 

cp /usr/local/mysql/lib/* /usr/lib/

[/font]

 

声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权

【Linux】linux mysql 找回密码

Continue Read..
1. 停到运行的mysql: /etc/init.d/mysql stop 

2. 使用skip-grant-tables这个选项启动MySQL: /usr/bin/mysqld_safe --skip-grant-tables & 

3. 现在可以不用密码进入mysql 了。 

# myql 

> use mysql; 

> UPDATE user SET password=password('123456') WHERE user='root'; //密码修改为123456; 

> FLUSH PRIVILEGES; 

> quit;//退出mysql 

4. 重启mysql : /etc/init.d/mysql restart 

现在就可以用mysql -uroot -p123456登陆了。 

声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权

Repeater绑定数据,数据Cout,选中样式

Continue Read..

点击查看原图

前台:

<ul>

                            <li <%=sectionkey=="0"?"class='cur'":"" %>><a href="ChestSet.aspx"><span class="all">全部(<%=sectioncount %>)</span></a></li>

                            <asp:Repeater ID="RepeaterSection" runat="server">

                        <ItemTemplate>

                            <li <%#GetCur(Eval("sectionkey").ToString()) %>><a href="ChestSet.aspx?sectionkey=<%#Eval("sectionkey") %>"><span><%#Eval("SectionName").ToString().Length > 10 ? Eval("SectionName").ToString().Substring(0, 9) : Eval("SectionName").ToString()%>(<%#Eval("ChestKeyCount")%>)</span></a></li>

                        </ItemTemplate>

                        </asp:Repeater>

                    </ul>

 

后台:

public int sectioncount = 0;

 

    //绑定科室及其科室数量

    private void BindSectionCounts()

    {

        user = (SupplyWebApp.Model.User)Session["USER"];

 

        string strwhere = " and (A.State = 0 or A.State = 1 or A.State=2)";

 

        dt = ChestC.BindSectionChest(strwhere);

        if (dt != null && dt.Rows.Count > 0)

        {

            foreach (DataRow dr in dt.Rows)

            {

                sectioncount += Convert.ToInt16(dr["ChestKeyCount"]);

            }

            RepeaterSection.DataSource = dt;

            RepeaterSection.DataBind();

        }

    }

声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权

Repeater绑定数据,获取枚举值

Continue Read..
点击查看原图
前台:
<asp:Repeater ID="RepeaterChests" runat="server" OnItemDataBound="RepeaterChests_ItemDataBound">
                                    <ItemTemplate>
                                        <tr class=" " id="d993667818fc065459b16d8008566676">
                                            <td><div class="tdof"><%#Eval("ChestUID")%></div></td>
                                            <td><div class="tdof"><%#Eval("NameText")%></div></td>
                                            <td><div class="tdof"><%#Eval("SectionName")%></div></td>
                                            <td><asp:Label Text='<%#Eval("ChestType") %>' ID="lblChestType" runat="server"></asp:Label></td>
                                            <td><div class="tdof"><%#Eval("IP")%></div></td>
                                            <td><div class="tdof"><%#Eval("DescText")%></div></td>
                                            <td>
                                            <a title="编辑" href='ChestSetAdd.aspx?sectionkey=<%=sectionkey %>&ChestKey=<%#Eval("ChestKey") %>' ><img src="../images/edit.png" style="vertical-align:middle"></img>&nbsp;编辑</a>  
                                            </td>
                                        </tr>
                                        </ItemTemplate>
                                        </asp:Repeater>

                            <webdiyer:aspnetpager ID="AspNetPager1" runat="server" CssClass="paginator" CurrentPageButtonClass="cpb"
                            EnableTheming="true" FirstPageText="首页" HorizontalAlign="right" LastPageText="尾页"
                            NextPageText="下一页"  PageIndexBoxType="DropDownList"
                            PageSize="12" PrevPageText="上一页" ShowPageIndexBox="Always" TextBeforePageIndexBox="跳转到: "
                            UrlPaging="false" Width="100%" onpagechanging="AspNetPager1_PageChanging"  >
                            </webdiyer:aspnetpager>     

后台:
//获取药车列表
    private void SelectAllChests(string sectionkey)
    {
        string strwhere = " ";

        strwhere = "and A.ChestType<>-1 ";

        if (!string.IsNullOrEmpty(sectionkey)&&sectionkey!="0")
        {
            strwhere += "and A.SectionKey = '" + sectionkey + "'";
        }

        else
        {
            if (DDLSection.Text != "0")
            {
                strwhere += " and A.SectionKey = " + DDLSection.Text;
            }

            //if (DDLState.Text != "3")
            //    strwhere += " and A.State = " + DDLState.Text;

            if (txtChestsName.Value != "")
                strwhere += " and A.NameText like '%" + txtChestsName.Value + "%'";

            //if (tbStart.Text != "")
            //    strwhere += " and CONVERT(varchar(100),A.CreatedLocalDtm, 23) >= '" + tbStart.Text + "'";

            //if (tbEnd.Text != "")
            //    strwhere += " and CONVERT(varchar(100), A.CreatedLocalDtm, 23) <= '" + tbEnd.Text + "'";
        }

        ds = ChestC.SelectAllChests(strwhere);
        DataTable dt = ds.Tables[0];

        //分页控件初始参数
        this.AspNetPager1.RecordCount = ds.Tables[0].Rows.Count;
        this.AspNetPager1.PageSize = 13;
        PagedDataSource pds = new PagedDataSource();

        pds.AllowPaging = true;
        pds.CurrentPageIndex = AspNetPager1.CurrentPageIndex - 1;
        pds.PageSize = AspNetPager1.PageSize;

        if (dt != null && dt.Rows.Count > 0)
        {
            pds.DataSource = dt.DefaultView;
            RepeaterChests.DataSource = pds;
        }
        RepeaterChests.DataBind();
    }


#region##获得Enum类型description
    ///
    /// 获得Enum类型description
    /// 创建人:Porschev
    /// 创建时间:2011-7-19
    ///
    ///枚举的类型
    ///枚举值
    ///string
    public static string GetEnumDesc(Type enumType, object val)
    {
        string enumvalue = System.Enum.GetName(enumType, val);
        if (string.IsNullOrEmpty(enumvalue))
        {
            return "";
        }
        System.Reflection.FieldInfo finfo = enumType.GetField(enumvalue);
        object[] enumAttr = finfo.GetCustomAttributes(typeof(System.ComponentModel.DescriptionAttribute), true);
        if (enumAttr.Length > 0)
        {
            System.ComponentModel.DescriptionAttribute desc = enumAttr[0] as System.ComponentModel.DescriptionAttribute;
            if (desc != null)
            {
                return desc.Description;
            }
        }
        return enumvalue;
    }

    #endregion

 

 

protected void RepeaterChests_ItemDataBound(object sender, RepeaterItemEventArgs e)

{

        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)

        {

            ((Label)e.Item.FindControl("lblChestType")).Text = GetEnumDesc(typeof(ChestType), Enum.Parse(typeof(ChestType), ((Label)e.Item.FindControl("lblChestType")).Text));

        }

}

 

 

    protected void AspNetPager1_PageChanging(object src, Wuqi.Webdiyer.PageChangingEventArgs e)

    {

        AspNetPager1.CurrentPageIndex = e.NewPageIndex;

        SelectAllChests(sectionkey);

    }   

声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权

GridView控件

Continue Read..
点击查看原图
前台:
<asp:GridView ID="GridPreview" runat="server" AutoGenerateColumns="False" CssClass="tableview" OnRowDataBound="GridPreview_RowDataBound" BorderWidth="0">
                <Columns>
                    <asp:BoundField DataField="DrawerName" HeaderText="抽屉名称"    />
                    <asp:BoundField DataField="SortNo" HeaderText="所在层数"         />
                    <asp:BoundField DataField="DrawerType" HeaderText="抽屉类型"        />

                    <asp:BoundField DataField="State" HeaderText="状态"          />
               </Columns>
            </asp:GridView>

后台:

private void bindPreview()
{
GridPreview.DataSource=chestInfo.DrawerList;
GridPreview.DataBind();
}

声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权

DropDownList数据绑定

Continue Read..

点击查看原图

HTML:

<asp:DropDownList ID="DDLSection" DataTextField="SectionName" DataValueField="SectionKey"  runat="server" style="width:150px;"></asp:DropDownList>

 

后台:

1.//获取数据表里的数据

 

DataSet ds=SupplyWebApp.BLL.Section.GetAllSections();

int i=0;

foreach(DataRow dr in ds.Tables[0].Rows)

{

DDLSection.Items.Insert(i,new ListItem(dr["SectionName"].ToString(),dr["SectionKey"].ToString()));

i++;

}

DDLSection.Items.Insert(0,new Listitem("请选择","0"));

DDLSection.SelectedValue="0";

(2)

DataSet ds = ChestC.GetSections();

        DDLSection.DataSource = ds;

        DDLSection.DataBind();

        DDLSection.Items.Insert(0, new ListItem("请选择", "0"));

 

2.//获取某条数据值

if (!Page.IsPostBack)

{

     DDLSection.SelectedItem.Text = chestInfo.SectionName;

     DDLSection.SelectedItem.Value = chestInfo.SectionKey.ToString();

}

声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权

【Android】环境配置(转载)

Continue Read..

——工欲善其事必先利其器

引言

本系列适合0基础的人员,因为我就是从0开始的,此系列记录我步入Android开发的一些经验分享,望与君共勉!作为Android队伍中的一个新人的我,如果有什么不对的地方,还望不吝赐教。

在开始Android开发之旅启动之前,首先要搭建环境,然后创建一个简单的HelloWorld。本文的主题如下:

  • 1、环境搭建
    • 1.1、JDK安装
    • 1.2、Eclipse安装
    • 1.3、Android SDK安装
    • 1.4、ADT安装
    • 1.5、创建AVD
  • 2、HelloWorld

1、环境搭建

1.1、JDK安装

如果你还没有JDK的话,可以去这里下载,接下来的工作就是安装提示一步一步走。设置环境变量步骤如下:

  1. 我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量:
  2. JAVA_HOME值为: D:\Program Files\Java\jdk1.6.0_18(你安装JDK的目录
  3. CLASSPATH值为:.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\bin;
  4. Path:  在开始追加 %JAVA_HOME%\bin;
  5. NOTE:前面四步设置环境变量对搭建Android开发环境不是必须的,可以跳过。

安装完成之后,可以在检查JDK是否安装成功。打开cmd窗口,输入java –version 查看JDK的版本信息。出现类似下面的画面表示安装成功了:

image

图1、验证JDK安装是否成功

1.2、Eclipse安装

如果你还么有Eclipse的话,可以去这里下载,下载如下图所示的Eclipse IDE for Java Developers(92M)的win 32bit版:

image图2、Eclipse下载

解压之后即可使用。

1.3、Android SDK安装

在Android Developers下载android-sdk_r05-windows.zip,下载完成后解压到任意路径。

  • 运行SDK Setup.exe,点击Available Packages。如果没有出现可安装的包,请点击Settings,选中Misc中的"Force https://..."这项,再点击Available Packages 。
  • 选择希望安装的SDK及其文档或者其它包,点击Installation Selected、Accept All、Install Accepted,开始下载安装所选包
  • 在用户变量中新建PATH值为:Android SDK中的tools绝对路径(本机为D:\AndroidDevelop\android-sdk-windows\tools)。

image图2、设置Android SDK的环境变量

“确定”后,重新启动计算机。重启计算机以后,进入cmd命令窗口,检查SDK是不是安装成功。 
运行 android –h 如果有类似以下的输出,表明安装成功:

image图3、验证Android SDK是否安装成功

1.4、ADT安装

  • 打开 Eclipse IDE,进入菜单中的 "Help" -> "Install New Software"
  • 点击Add...按钮,弹出对话框要求输入Name和Location:Name自己随便取,Location输入http://dl-ssl.google.com/android/eclipse。如下图所示:

image

  • 确定返回后,在work with后的下拉列表中选择我们刚才添加的ADT,我们会看到下面出有Developer Tools,展开它会有Android DDMS和Android Development Tool,勾选他们。 如下图所示:

image

  • 然后就是按提示一步一步next。

完成之后:

  • 选择Window > Preferences...
  • 在左边的面板选择Android,然后在右侧点击Browse...并选中SDK路径,本机为: 
    D:\AndroidDevelop\android-sdk-windows
  • 点击Apply、OK。配置完成。

1.5、创建AVD

为使Android应用程序可以在模拟器上运行,必须创建AVD。

  • 1、在Eclipse中。选择Windows > Android SDK and AVD Manager
  • 2、点击左侧面板的Virtual Devices,再右侧点击New
  • 3、填入Name,选择Target的API,SD Card大小任意,Skin随便选,Hardware目前保持默认值 
  • 4、点击Create AVD即可完成创建AVD

注意:如果你点击左侧面板的Virtual Devices,再右侧点击New ,而target下拉列表没有可选项时,这时候你:

image

    • 然后点击Install Selected按钮,接下来就是按提示做就行了

要做这两步,原因是在1.3、Android SDK安装中没有安装一些必要的可用包(Available Packages)。

2、HelloWorld

  • 通过File -> New -> Project 菜单,建立新项目"Android Project"
  • 然后填写必要的参数,如下图所示:(注意这里我勾选的是Google APIs,你可以选你喜欢的,但你要创建相应的AVD)

image

相关参数的说明:

  1. Project Name: 包含这个项目的文件夹的名称。
  2. Package Name: 包名,遵循JAVA规范,用包名来区分不同的类是很重要的,我用的是helloworld.test。
  3. Activity Name: 这是项目的主类名,这个类将会是Android的Activity类的子类。一个Activity类是一个简单的启动程序和控制程序的类。它可以根据需要创建界面,但不是必须的。
  4. Application Name: 一个易读的标题在你的应用程序上。
  5. 在"选择栏"的 "Use default location" 选项,允许你选择一个已存在的项目。
  • 点击Finish后,点击Eclipse的Run菜单选择Run Configurations…
  • 选择“Android Application”,点击在左上角(按钮像一张纸上有个“+”号)或者双击“Android Application”, 有个新的选项“New_configuration”(可以改为我们喜欢的名字)。
  • 在右侧Android面板中点击Browse…,选择HelloWorld
  • 在Target面板的Automatic中勾选相应的AVD,如果没有可用的AVD的话,你需要点击右下角的Manager…,然后新建相应的AVD。如下图所示:

image

  • 然后点Run按钮即可,运行成功的话会有Android的模拟器界面,如下图所示:

image

作者:吴秦
出处:http://www.cnblogs.com/skynet/
本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名吴秦(包含链接).

【JS】加入收藏代码

Continue Read..
<a href="<?php  echo 'http://www.wulinlw.org/'; '?>" onclick="window.external.AddFavorite(location.href,document.title)">加入收藏</a>

声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权

【Linux】linux执行mysql

Continue Read..
linux下执行mysql的sql文件
mysql -uroot -proot
进入到mysql
然后执行source /var/ftp/pub/sogoodsoft.sql;
即可。
www.2cto.com
以下内容转:
linux 里的mysql命令总结 - 学习linux+mysql必备
一、总结一下Linux下MySQL的一些命令:
1.Linux下启动mysql的命令:
mysqladmin start
/ect/init.d/mysql start (前面为mysql的安装路径)
2.Linux下重启mysql的命令:
mysqladmin restart
/ect/init.d/mysql restart (前面为mysql的安装路径)
3.Linux下关闭mysql的命令:
mysqladmin shutdown
/ect/init.d/mysql shutdown (前面为mysql的安装路径)
4.连接本机上的mysql:
进入目录mysql\bin,再键入命令mysql -uroot -p, 回车后提示输入密码。
退 出mysql命令:exit(回车)
5.修改mysql密码:
mysqladmin -u用户名 -p旧密码 password 新密码
或进入mysql命令行 SET PASSWORD FOR root=PASSWORD("root");
6.增加新用户。(注意:mysql环境中的命令后面都带一个分号作为命令结束符)
grant select on 数据库.* to 用户名@登录主机 identified by "密码"
如增加一个用户test密码为123,让他可以在任何主机上登录, 并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入mysql,然后键入以下命令:
grant select,insert,update,delete on *.* to " Identified by "123";
二、有关mysql数据库方面的操作
必须首先登录到mysql中,有关操作都是在mysql的提示符下进行,而且每个命令以分号结束
1、显示数据库列表。
show databases;
2、显示库中的数据表:
use mysql; //打开库
show tables;
3、显示数据表的结构:
describe 表名;
4、建库:
create database 库名;
5、建表:
use 库名;
create table 表名(字段设定列表);
6、删库和删表:
drop database 库名;
drop table 表名;
7、将表中记录清空:
delete from 表名;
8、 显示表中的记录:
select * from 表名;
9、编码的修改
如果要改变整个mysql的编码格式:
启动mysql的时候,mysqld_safe命令行加入
--default-character-set=gbk
如果要改变某个库的编码格式:在mysql提示符后输入命令
alter database db_name default character set gbk;
www.2cto.com
三、数据的导入导出
1、文本数据转到数据库中
文本数据应符合的格式:字段数据之间用tab键隔开,null值用来代替。例:
1 name duty 2006-11-23
数据传入命令 load data local infile "文件名" into table 表名;
2、导出数据库和表
mysqldump --opt news > news.sql(将数据库news中的所有表备份到news.sql文件,news.sql是一个文本文件,文件名任取。)
mysqldump --opt news author article > author.article.sql(将数据库news中的author表和article表备份到author.article.sql文件, author.article.sql是一个文本文件,文件名任取。)
mysqldump --databases db1 db2 > news.sql(将数据库dbl和db2备份到news.sql文件,news.sql是一个文本文件,文件名任取。)
mysqldump -h host -u user -p pass --databases dbname > file.dump
就是把host上的 以名字user,口令pass的数据库dbname导入到文件file.dump中
mysqldump --all-databases > all-databases.sql(将所有数据库备份到all-databases.sql文件,all-databases.sql是一个文本文件, 文件名任取。)
3、导入数据
mysql < all-databases.sql(导入数据库)
mysql>source news.sql;(在mysql命令下执行,可导入表)
www.2cto.com
一、连接MySQL
格式: mysql -h主机地址 -u用户名 -p用户密码
1、例1:连接到本机上的MYSQL。
首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -uroot -p,回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是: mysql>。
2、例2:连接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键 入以下命令:
mysql -h110.110.110.110 -uroot -pabcd123
(注:u与root可以不用加空格,其它也一样)
3、退出MYSQL命令: exit (回车)。

【Linux】linux下执行mysql的sql文件

Continue Read..