IronPython操作数据库

IronPython操作数据库

# -*- coding: utf-8 -*-
import clr
clr.AddReference('System.Data' )
from System .Data import *

conn = SqlClient.SqlConnection("server=42.96.190.81,2433;database=QQRobot;uid=sa;pwd=xinyang0822_xin;pooling=true;Enlist=true;connection lifetime=300;min pool size = 0;max pool size=512;packet size=1000")
conn.Open()

cmd = SqlClient.SqlCommand("select * from AIData where Id=1", conn)
reader = cmd.ExecuteReader(CommandBehavior.CloseConnection)

while reader.Read():
    print reader[0]

reader.Close()
conn.Close()

C#使用Uri.EscapeDataString对URL参数进行编码

System.Web.HttpUtility.UrlEncode

都是对参数进行编码,要像下面这样写:

string data = string.Format(@"{{""ptwebqq"":""{0}"",""clientid"":{1},""psessionid"":""{2}"",""status"":""online""}}", _PTWebQQ, ClientID, PSessionID);
data = "r=" + Uri.EscapeDataString(data);

而不要把r=也编码进去!!!

血的教训,一晚上加一上午都浪费在这上面了!!!!

而python的urllib.parse.urlencode传入的是字典,所以避免了这个坑。

.NET使用UDE.CSharp识别文件编码

.NET中识别文件编码、识别字符集,有一个比较好用的包UDE.CSharp可以实现,这个包是Mozilla出品的,又叫Mozilla Universal Charset Detector。

首先在nuget下载安装UED:

使用样例如下:

private void btnImport_Click(object sender, EventArgs e)
{
    OpenFileDialog dlg = new OpenFileDialog();
    dlg.DefaultExt = ".txt";
    dlg.Filter = "txt文件|*.txt";
    if (dlg.ShowDialog() == System.Windows.Forms. DialogResult.OK)
    {
        _list.Clear();
        string filename = dlg.FileName;

        //使用Mozilla Universal Charset Detector侦测文件编码
        string charset = "UTF-8";
        using ( FileStream fs = File .OpenRead(filename))
        {
            Ude. CharsetDetector cdet = new Ude.CharsetDetector ();
            cdet.Feed(fs);
            cdet.DataEnd();
            if (cdet.Charset != null)
            {
                charset = cdet.Charset;
            }
        }

        string[] lines = File.ReadAllLines(filename, Encoding.GetEncoding(charset));

        foreach ( var line in lines)
        {
            //去重
            if (_list.IndexOf(line) == -1)
            {
                _list.Add(line);
            }
        }
    }
}

Dapper执行存储过程,获取Sequence

Dapper执行存储过程,获取Sequence

这里主要是DynamicParameters的使用

using (var conn = DbConfig .GetConnection())
{
    conn.Open();
    var p = new DynamicParameters();
    p.Add("@seq", dbType: DbType.Int32, direction: ParameterDirection.ReturnValue);
    conn.Execute("P_GetSeq", p, commandType: CommandType.StoredProcedure);
    Response.Write(p.Get< int>( "@seq"));
}

去掉新浪SAE未实名认证时的提示

最近 SAE 在未实名认证的应用上会有一提示:该页面的提供者尚未完成’,’实名认证’,’您的访问可能存在风险。

提示就提示吧,只是每次挡住后台的菜单比较麻烦。

于是果断 F12 看了一下,原来SAE是在标签的结尾加了一段 JS ,用 JS 来生成提示代码。

好吧,找到 typecho 的 footer.php 文件,在最后加一个<!-- 然后保存上传,刷新页面后,提示消失了。

前台的 footer.php 在 usr/themes/default 目录下。

后台的 footer.php 在 admin 目录下。

对于后台,我是直接在文件最后 使用echo输出 一个<!--

<?php if(!defined('__TYPECHO_ADMIN__')) exit; ?>
    </body>
</html>
<?php
/** 注册一个结束插件 */
Typecho_Plugin::factory('admin/footer.php')->end();

echo '<!--';

搞定!

开始使用独立博客

很早就想有一个属于自己的独立博客,域名早就注册好了,www.wujie.me,但一直没有行动。

本来是想自己做博客的,但折腾了几天,实在是没时间和精力去弄,于是选择了typecho这个PHP博客系统。对这个系统关注很久了,代码很清晰明了,比WP好不少,以前折腾过WP,功能是不少,但代码实在是看不下去。

这个博客HOST在新浪SAE上,SAE的一个好处就是可以绑定未备案域名,这点还是非常不错的。目前还没有做实名认证,以至于每次刷新页面,都会弹出一个未实名认证完成的提示。改天要去提交下资料认证下。免费的,挺好的。

博客搭建起来了,有时间尽量应该写一写。记录一下,与人分享。

2024.11.25:wujie.me已于2019年11月从零重建,作为自己的生活博客。notes.wujie.me 作为自己的个人技术博客。

Typecho在新浪SAE上开启Rewrite

Typecho在新浪SAE上开启Rewrite:

打开 SAE 应用上的 config.yaml

#cron:
# - description: cron test
# url: index.php
# schedule: every 43 mins
# timezone: Beijing
handle:
- rewrite: if(!is_dir() && !is_file()) goto "index.php?%{QUERY_STRING}"

使用 SVN 上传到 SAE ,然后在 typecho 后台 “设置”=>“永久链接”=>“启用地址重写功能”,提示失败时,直接勾选略并继续就行了。

失败是由于创建 .htaccess 文件失败,但在 SAE 上是使用的是config.yaml 来配置 URL 重写的,因为我们上面已经手动配置好了config.yaml,所以这里不用管它,可以直接忽略。

现在越来越喜欢 typecho 这个程序了,简洁不简单,各种情况都考虑到了。

2024.11.25补充:博客程序就选wordpress,生态很重要。