1 public class SinaoAuth
  2     {
  3         string APIHost = "";
  4         public SinaoAuth() 
  5         {
  6             APIHost = SinaConfig.Sina_Host;
  7         }
  8 
  9         #region 绑定微博帐号
 10         /// <summary>
 11         /// 绑定微博帐号
 12         /// </summary>
 13         /// <param name="username">新浪微博的登录帐号</param>
 14         /// <param name="password">新浪微博的登录密码</param>
 15         /// <returns>失败返回null</returns>
 16         public string Binding(String username, String password)
 17         {
 18             if (String.IsNullOrEmpty(username) || String.IsNullOrEmpty(password))
 19             {
 20                 return null;
 21             }
 22             string apiUrl = "https://api.weibo.com/oauth2/access_token?client_id=" + SinaConfig.Sina_AppKey + "&client_secret=" + SinaConfig.Sina_AppSecurity + "&grant_type=password&username=" + username + "&password=" + password;
 23 
 24             try
 25             {
 26                 HttpWebRequest webReq = (HttpWebRequest)HttpWebRequest.Create(apiUrl);
 27                 webReq.Method = "POST";
 28                 webReq.Timeout = 2000;
 29                 //webReq.Headers.Add("Authorization", header);
 30                 HttpWebResponse webRsp = (HttpWebResponse)webReq.GetResponse();
 31 
 32                 using (StreamReader reader = new StreamReader(webRsp.GetResponseStream()))
 33                 {
 34                     string rsp = reader.ReadToEnd();
 35                     AccessTokenResponse accessToken = new AccessTokenResponse(rsp);
 36                     if (accessToken != null && accessToken.IsValid)
 37                     {
 38                         return accessToken.AccessToken;
 39                     }
 40                     else
 41                     {
 42                         return null;
 43                     }
 44                 }
 45             }
 46             catch (WebException e)
 47             {
 48                 return GetErrorMessage(e);
 49             }
 50         }
 51 
 52         private string GetErrorMessage(WebException e) 
 53         {
 54             try
 55             {
 56                 HttpWebResponse webResponse = e.Response as HttpWebResponse;
 57                 StreamReader myread = new StreamReader(webResponse.GetResponseStream());
 58                 string error = myread.ReadToEnd();
 59                 ErrorMessage errorMessage = new ErrorMessage(error);
 60                 return errorMessage.Error_code;
 61             }
 62             catch (Exception ex)
 63             {
 64                 return ex.Message;
 65                 throw;
 66             }
 67         }
 68 
 69         /// <summary>
 70         /// 用web方式登录
 71         /// </summary>
 72         /// <param name="code"></param>
 73         /// <returns></returns>
 74         public string Binding(string code)
 75         {
 76             string apiUrl = "https://api.weibo.com/oauth2/access_token?client_id="+SinaConfig.Sina_AppKey+"&client_secret="+
 77                 SinaConfig.Sina_AppSecurity + "&grant_type=authorization_code&redirect_uri=http://sae.sina.com.cn/&code="+code;
 78             try
 79             {
 80                 HttpWebRequest webReq = (HttpWebRequest)HttpWebRequest.Create(apiUrl);
 81                 webReq.Method = "POST";
 82                 webReq.Timeout = 2000;
 83                 //webReq.Headers.Add("Authorization", header);
 84                 HttpWebResponse webRsp = (HttpWebResponse)webReq.GetResponse();
 85 
 86                 using (StreamReader reader = new StreamReader(webRsp.GetResponseStream()))
 87                 {
 88                     string rsp = reader.ReadToEnd();
 89                     AccessTokenResponse accessToken = new AccessTokenResponse(rsp);
 90                     if (accessToken != null && accessToken.IsValid)
 91                     {
 92                         return accessToken.AccessToken;
 93                     }
 94                     else
 95                     {
 96                         return null;
 97                     }
 98                 }
 99             }
100             catch (WebException e)
101             {
102                 return GetErrorMessage(e);
103             }
104         }
105 
106         /// <summary>
107         /// 直接发送微博
108         /// </summary>
109         /// <param name="access_token"></param>
110         /// <param name="status"></param>
111         /// <returns></returns>
112         public string update(string access_token,string status) 
113         {
114             string apiUrl = "https://api.weibo.com/2/statuses/update.json";
115             try
116             {
117                 HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(apiUrl);
118                 request.Method = "POST";
119                 request.Timeout = 2000;               
120                 request.ContentType = "application/x-www-form-urlencoded";
121                 System.Text.Encoding encoding = System.Text.Encoding.ASCII;
122                 byte[] bytesToPost = encoding.GetBytes("access_token=" + access_token + "&status=" + UrlEncode(status));
123                 request.ContentLength = bytesToPost.Length;
124                 System.IO.Stream requestStream = request.GetRequestStream();
125                 requestStream.Write(bytesToPost, 0, bytesToPost.Length);
126                 requestStream.Close();
127 
128                 HttpWebResponse response = (HttpWebResponse)request.GetResponse();
129                 using (StreamReader reader = new StreamReader(response.GetResponseStream()))
130                 {
131                     string rsp = reader.ReadToEnd();
132                     if (rsp != "")
133                     {
134                         return "SUCCESS";
135                     }
136                 }
137                 return null;
138             }
139             catch (WebException ex)
140             {
141                 return GetErrorMessage(ex);
142             }
143         }
144 
145         public static string UrlEncode(string str)
146         {
147             StringBuilder sb = new StringBuilder();
148             byte[] byStr = System.Text.Encoding.UTF8.GetBytes(str); //默认是System.Text.Encoding.Default.GetBytes(str)
149             for (int i = 0; i < byStr.Length; i++)
150             {
151                 sb.Append(@"%" + Convert.ToString(byStr[i], 16));
152             }
153 
154             return (sb.ToString());
155         }
156 
157         /// <summary>
158         /// 发送带图片的微博
159         /// </summary>
160         /// <param name="access_token"></param>
161         /// <param name="status">文字内容</param>
162         /// <param name="pic">图片的byte流</param>
163         /// <returns></returns>
164         public string ShareImg(string access_token,string status,byte[] pic) 
165         {
166             string apiUrl = "https://api.weibo.com/2/statuses/upload.json?access_token=" + access_token + "&status=" +UrlEncode(status) + "&pic=" + @pic + "";
167             
168             try
169             {
170                 HttpWebRequest webReq = (HttpWebRequest)HttpWebRequest.Create(apiUrl);
171                 webReq.Method = "POST";
172                 webReq.Timeout = 2000; 
173                 string boundary = Guid.NewGuid().ToString();
174                 //webReq.ContentType = string.Format("text/html; charset=GBK");
175                 webReq.ContentType=string.Format("multipart/form-data; boundary={0}", boundary);
176                 byte[] contents = getMultipartContent(status, pic, boundary);
177                 webReq.ContentLength = contents.Length;
178                 webReq.GetRequestStream().Write(contents, 0, contents.Length);
179 
180                 HttpWebResponse webRsp = (HttpWebResponse)webReq.GetResponse();
181 
182                 using (StreamReader reader = new StreamReader(webRsp.GetResponseStream()))
183                 {
184                     string rsp = reader.ReadToEnd();
185                     if (rsp != "")
186                     {
187                         return "SUCCESS";
188                     }
189                 }
190                 return null;
191             }
192             catch (WebException e)
193             {
194                 return GetErrorMessage(e);
195             }
196         }
197 
198 
199         private byte[] getMultipartContent(string msg, byte[] pic, string boundary)
200         {
201             string contentEncoding = "iso-8859-1";
202             string header = string.Format("--{0}", boundary);
203             string footer = string.Format("--{0}--", boundary);
204 
205             StringBuilder contents = new StringBuilder();
206             contents.AppendLine(header);
207             contents.AppendLine(String.Format("Content-Disposition: form-data; name=\"{0}\"", "status"));
208             contents.AppendLine("Content-Type: text/plain;  charset=US-ASCII");
209             contents.AppendLine("Content-Transfer-Encoding: 8bit");
210             contents.AppendLine();
211             contents.AppendLine(UrlEncode(msg));
212 
213             contents.AppendLine(header);
214             contents.AppendLine(string.Format("Content-Disposition: form-data; name=\"{0}\"", "source"));
215             contents.AppendLine("Content-Type: text/plain;  charset=US-ASCII");
216             contents.AppendLine("Content-Transfer-Encoding: 8bit");
217             contents.AppendLine();
218             contents.AppendLine(SinaConfig.Sina_AppKey);
219 
220             contents.AppendLine(header);
221             string fileHeader = string.Format("Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"", "pic", "");
222             string fileData = System.Text.Encoding.GetEncoding(contentEncoding).GetString(pic);
223 
224             contents.AppendLine(fileHeader);
225             contents.AppendLine("Content-Type: application/octet-stream; charset=UTF-8");
226             contents.AppendLine("Content-Transfer-Encoding: binary");
227             contents.AppendLine();
228             contents.AppendLine(fileData);
229             contents.AppendLine(footer);
230 
231             return Encoding.GetEncoding(contentEncoding).GetBytes(contents.ToString());
232         }
233 
234         #endregion
235     }

提供学习交流,不正确的希望园子们指出来 谢谢 哈。

posted @ 2012-04-11 14:57 行者,无疆 阅读(94) 评论(0) 编辑

Excle环境配置:

对 Excel进行编程,实际上就是通过 .Net Framework去调用 Excel的 COM组件,所有要在 Web环境下调用 COM组件的时候,都需要对其进行相应的配置。
很多朋友都反映在 Windows环境下调试正常的程序,一拿到 Web环境中就出错,实际上就是因为缺少了这一步。
下面就详细介绍 DCOM的配置过程。

1、运行“dcomcnfg”,打开 DCOM配置程序。(或者 开始→设置→控制面版→管理工具→组件服务→计算机→我的电脑→DCOM配置)


2、在应用程序列表中找到“Microsoft Excel应用程序”,点击“属性”,在2003下面如果没找不到属性,请打SP2补丁。
 

3、将 “常规”选项卡中的 “身份验证级别”设为 “无”。
 

4、选中 “安全性”选项卡中的 “使用自定义配置权限”,点击 “编辑”。

5、在打开的对话框中添加 “Internet来宾用户”(通常是IUSR_机器名) ,访问类型设为“完全控制”。
 

6、将 “身份标识”选项卡中的用户设为 “交互式用户”。
 

7、点击“应用”之后,关闭属性页和 DCOM配置程序。配置完成

 

Excle设置参考

http://www.cnblogs.com/sjjsky/archive/2008/03/26/1123002.html

自定义COM+组件,在启动时报错“错误代码 8000401A - 因为配置类型不正确,系统无法开始服务器进程。请检查用户名和密码。”

解决办法:

运行dcomcnfg打开组件服务, 

依次展开"组件服务"->"计算机"->"我的电脑"->"COM+应用程序" 

找到对应的应用程序 

右键打开属性对话框,点击"标识"选项卡, 

点"下列用户",把管理员(Administrator)的用户和密码(登陆服务器的密码)正确填写进去。但一旦重新装系统或者密码变化后需要重新在此处设置密码。

posted @ 2012-01-10 21:17 行者,无疆 阅读(138) 评论(0) 编辑

Activity :

activity是Android提供的界面,所有和用户交互的事情都发生在这个类。

 

Activity的生命周期:

OnCreate() 创建的时候会调用这个方法 设置这个Activity设置布局控件,初始化数据等。

OnStart() 当控件被我们看到的时候,就调用OnStart()方法 在OnCreate()之后 或者OnStop()后调用。

OnResume() 当重新获得用户焦点的时候就调用这个方法。

onPause() 保护现场用的 可能被另外一个透明的Dialog窗口覆盖,失去焦点,但是他仍然和窗口管理器保持连接,系统可以继续保护Activity的内部状态。

onStop()  停止和OnStart()对应,注意OnStop()和OnPause()不一样的地方是他是完全被另外一个窗口覆灭。也就是失去焦点而且不可见。

onDestory()销毁

 

创建一个Activity的要点

1.一个Activity就是一个类,并且这个类要继承Activity

2.需要复写onCreate方法

3.要在Androidmanifest.xml进行配置(四大组件都要进行配置)

4.为Activity添加必要的控件

 

在一个Activity启动另外一个Activity

Intent intent=new Intent(CurrentActivity.this,OtherActivity.class) //OtherActivity也要在AndroidManifest.xml中注册。

startActivity(intent);

Intent还可以放入各种数据 传入下一个Activity。

 

可以用下面的方式接收传过来的数据:

 

还可以用Bundel的方法发送数据。Bundel就像一个承载数据的List<> 里面可以放各种数据。但是他的key只能是string类型的,放入Intent的方式也是intent.putExtra(bundle);

 

 

Service

Service在什么时候会用到呢?比如说音乐程序的时候,需要后台运行,但是又看不到界面,此时就用到Service。这也是Service和Activity最大的不同。

 

Service 分类:

本地Service和远程Service。

本地Service是同一个进程内Service彼此之间共同的内存区域。

远程Service是同一个系统内的不同进程之间访问(注意是同一个系统内,不是不同系统)。

 

Service生命周期:

onCreate()->onStart()->onDestory() 三个方法 继承的时候如果要用到记得重新写下。

 

创建一个Service要点:

1.  创建一个类,要继承Service

2.  要在androidManifest.xml中进行配置

3.  在Activity中配置调用它

 

Broadcast Receiver

在android中可以通过broadcast告诉其他程序发生了什么事情。比如电源,比如短信,比如信号。

Broadcast Receiver相比于其他组件比较特别的地方是他还提供了一种所谓的热注册,就是不用写在androidManifest.xml中,直接用

registerReceiver(Broadcastreceiver,IntentFilter)注册。然后用unregisterReceiver()消除注册。

 

一些常用的Action:

ACTION_CALL                                              activity                        启动一个电话.
ACTION_EDIT                                               activity                       显示用户编辑的数据.
ACTION_MAIN                                               activity                      作为Task中第一个

Activity启动
ACTION_SYNC                                             activity                         同步手机与数据服务器上的数据.
ACTION_BATTERY_LOW                           broadcast receiver       电池电量过低警告.
ACTION_HEADSET_PLUG                        broadcast receiver        插拔耳机警告
ACTION_SCREEN_ON                               broadcast receiver        屏幕变亮警告.
ACTION_TIMEZONE_CHANGED              broadcast receiver         改变时区警告.

 

Content Provider

这个组件比较复杂

ContentProvider可以支持多个应用的数据共享。可以用来操作音频,视频,图片,私人通讯录等等。但是要记得获取适当的读取权限。当然也可以用来公开自己的数据。(难道Content Provider是全局变量?整个手机的程序都能访问得到?)

 

创建Content Provider 要点:

1.  创建一个Content Provider首先要继承ContentProvider类。

2.       在androidManifest中配置

3.       在Activity类中调用insert() query()可以调用

 

实际上所有的contentprovider用户都不能直接访问contentprovider实例,只能通过ContentResolver的中间代理。而要得到ContentResolver的实例可以用Activity的getContentResolver方法。如下

可以自己去调用ContentProvider相应的方法。

 

Uri使用方法:来自http://blog.sina.com.cn/s/blog_5688414b0100xagp.html

为系统的每一个资源给其一个名字,比方说通话记录。

1、每一个ContentProvider都拥有一个公共的URI,这个URI用于表示这个ContentProvider所提供的数据。 

2、Android所提供的ContentProvider都存放在android.provider包中。 将其分为A,B,C,D 4个部分:

 

A:标准前缀,用来说明一个Content Provider控制这些数据,无法改变的;"content://"

 B:URI 的标识,它定义了是哪个Content Provider提供这些数据。对于第三方应用程序,为了保证URI标识的唯一性,它必须是一个完整的、小写的 类名。这个标识在 元素的 authorities属性中说明:一般是定义该ContentProvider的包.类的名称;"content://hx.android.text.myprovider"

C:路径,不知道是不是路径,通俗的讲就是你要操作的数据库中表的名字,或者你也可以自己定义,记得在使用的时候保持一致就ok了

"content://hx.android.text.myprovider/tablename"

D:如果URI中包含表示需要获取的记录的ID;则就返回该id对应的数据,如果没有ID,就表示返回全部;"content://hx.android.text.myprovider/tablename/#" #表示数据id

 

 

数据模型:

ContentProvider返回的数据结构是Cursor类似于DataSet,每一个contentprovider 定义一个唯一公开的URI,用于指定他的数据集。一个contentprovider可以包含多个数据集。这样就需要多个URI与之对应。URI的开头必须是 “content://”

表示这个Uri指定一个contentprovider。

 

增删查改:

 

查询

Cursor cursor = getContentResolver().query(

ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null,null,null);

得到查询数据:

 

Cursor.moveToNext()读取到下一条 类似于C#的sdr.read()

条件发在哪里?

可以放在                                                                                                              

修改:

 

插入:

数据放在values内,values是键值对。如下:

ContentValues values = new ContentValues();

values.put(People.NAME, "Abraham Lincoln");

Uri uri = getContentResolver().insert(People.CONTENT_URI, values);

 

 错误应该很多 求指点....刚刚开始的Android之旅。。。

 

 

posted @ 2011-12-20 11:22 行者,无疆 阅读(1869) 评论(1) 编辑

嗯 多字段查找和删除重复数据。 in 语句在SQL Server 里面不能有多个字段的 所以用inner join 可以 0

select * from CET4Grade  a inner join

(select SJXQ,XQ,StudentID from dbo.CET4Grade

group by SJXQ,XQ,StudentID having count(*)>1)

b on a.SJXQ=b.SJXQ and a.XQ=b.XQ and a.StudentID=b.StudentID

删除 嗯 用exists

Delete t from dbo.CET4Grade t where exists

(

select SJXQ,XQ,StudentID from CET4Grade 

group by SJXQ,XQ,StudentID having count(*)>1 and SJXQ=t.SJXQ and XQ=t.XQ and StudentID=t.StudentID

)

posted @ 2011-10-09 01:48 行者,无疆 阅读(40) 评论(0) 编辑

来自http://blog.sina.com.cn/s/blog_4d879e610100kswa.html

这个是可以的,当你在Form1激活的时候,按下A键,系统会切换到另一个程序上。

public class Form1 : Form
{
   
 public Form1()
    {
       
 this.SuspendLayout();
       
 // 
       
 // Form1
       
 // 
        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
       
 this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
       
 this.ClientSize = new System.Drawing.Size(292, 266);
       
 this.Name = "Form1";
       
 this.Text = "Form1";
       
 this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Form1_KeyDown);
       
 this.ResumeLayout(false);
    }

   
 private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
       
 if (e.KeyCode == Keys.A)
        {
            SendKeys.Send(
"{TAB}");
        }
    }
}


下面是从MSDN上摘录的关于SendKeys.Send的说明:

SendKeys.Send 方法
向活动应用程序发送击键。 

命名空间:System.Windows.Forms
程序集:System.Windows.Forms(在 system.windows.forms.dll 中)

语法
Visual Basic(声明) 
Public Shared Sub Send ( _
keys As String _
)
 
Visual Basic(用法) 
Dim keys As String

SendKeys.Send(keys)
 
C# 
public static void Send (
string keys
)
 


参数
keys
要发送的击键字符串。 

异常
异常类型 条件 
InvalidOperationException
 没有可向其发送击键的活动应用程序。 
 
ArgumentException
 keys 并不表示有效击键
 

备注
每个键都由一个或多个字符表示。若要指定单个键盘字符,请使用该字符本身。例如,若要表示字母 A,请将字符串“A”传递给方法。若要表示多个字符,请将各个附加字符追加到它之前的字符的后面。若要表示字母 A、B 和 C,请将参数指定为“ABC”。

加号 (+)、插入符号 (^)、百分号 (%)、波浪号 (~) 以及圆括号 ( ) 对 SendKeys 具有特殊含义。若要指定这些字符中的某个字符,请将其放在大括号 ({}) 内。例如,若要指定加号,请使用“{+}”。若要指定大括号字符,请使用“{{}”和“{}}”。中括号 ([ ]) 对 SendKeys 没有特殊含义,但必须将它们放在大括号内。在其他应用程序中,中括号具有特殊含义,此含义可能会在发生动态数据交换 (DDE) 时起重要作用。

警告 
如果应用程序用于键盘各不相同的国际用途,则使用 Send 可能产生不可预知的结果,应避免使用它。
 

若要指定在按键(如 Enter 或 Tab)时不显示的字符,以及表示操作而不表示字符的键,请使用下表中的代码:

键 
 代码 
 
Backspace {BACKSPACE}、{BS} 或 {BKSP} 
 
Break {BREAK} 
 
Caps Lock  {CAPSLOCK} 
 
Del 或 Delete {DELETE} 或 {DEL} 
 
向下键 {DOWN} 
 
End {END} 
 
Enter {ENTER} 或 ~ 
 
Esc {ESC} 
 
Help {HELP} 
 
Home {HOME} 
 
Ins 或 Insert {INSERT} 或 {INS} 
 
向左键  {LEFT} 
 
Num Lock  {NUMLOCK} 
 
Page Down  {PGDN} 
 
Page Up  {PGUP} 
 
Print Screen  {PRTSC}(保留供将来使用) 
 
向右键  {RIGHT} 
 
Scroll Lock  {SCROLLLOCK} 
 
Tab  {TAB} 
 
向上键 {UP} 
 
F1  {F1} F2 {F2} F3  {F3} F4  {F4} F5 {F5} F6 {F6} F7  {F7} F8 {F8} F9  {F9} F10 {F10} F11 {F11} F12 {F12} F13  {F13} F14 {F14} F15  {F15} F16  {F16} 
 
数字键盘加号 
 {ADD} 
 
数字键盘减号 
 {SUBTRACT} 
 
数字键盘乘号 
 {MULTIPLY} 
 
数字键盘除号 
 {DIVIDE} 
 

若要指定与 Shift、Ctrl 和 Alt 键的任意组合一起使用的键,请在这些键代码之前加上以下一段或多段代码。

键 
 代码 
 
Shift +  Ctrl ^  Alt % 
 

若要指定在按一些键时应同时按住 Shift、Ctrl 和 Alt 键的任意组合,请将这些键的代码放在括号内。例如,若要指定按 E 和 C 时同时按住 Shift 键,请使用“+(EC)”。若要指定按 E 时应按住 Shift,之后按 C 时不按住 Shift,请使用“+EC”。

若要指定重复键,请使用格式 {key number}。键和数字之间必须放一空格。例如,{LEFT 42} 表示按向左键 42 次;{h 10} 表示按 H 10 次。

注意 
因为没有可用来激活另一个应用程序的托管方法,所以可以在当前应用程序中使用此类,或使用本机 Windows 方法(如 FindWindow 和 SetForegroundWindow)来强制聚焦到其他应用程序上。

posted @ 2011-09-08 08:50 行者,无疆 阅读(208) 评论(0) 编辑
摘要: 就在网上找了端js和正则表达式的来替换“” 空格!阅读全文
posted @ 2011-08-30 23:39 行者,无疆 阅读(41) 评论(0) 编辑
摘要: 腾讯的很多产品都灰常的棒。但是不得不承认有些东西总有这样或者那样的不满意。今天吐槽主要来自于手机产品。  主要有四个方面的问题:  第一,格局太小,没有做平台的野心。很多产品主要局限于自己,霸气外漏得太严重。严重排斥竞争对手。太过于集中于自己的产品,而牺牲了用户体验。比如手机QQ浏览器,这个产品在安卓上比UC好,很多网站在它上面都没有出现像UC一样的排版混乱。而且很多测试比UC分数高的多。比如HTML5测试。但是UC仍然遥遥领先,当然UC有先发优势,但是QQ浏览器没有做好平台的勇气。比如下面每一个网址导航都有一项是腾讯的,点入导航的大项目,居然还是自己的频道,只多了一个相似网站,这是一个错误,阅读全文
posted @ 2011-02-14 00:48 行者,无疆 阅读(72) 评论(0) 编辑