SQLSERVER与C#中数据类型的对应关系

SQLSERVER与C#中数据类型的对应关系

  ///<summary>
  ///数据库中与C#中的数据类型对照
  ///</summary>
  ///<paramname="type"></param>
  ///<returns></returns>
  privatestringChangeToCSharpType(stringtype)
  {
   stringreval=string.Empty;
   switch(type.ToLower())
   {
    case"int":
     reval="Int32";
     break;
    case"text":
     reval="String";
     break;
    case"bigint":
     reval="Int64";
     break;
    case"binary":
     reval="System.Byte[]";
     break;
    case"bit":
     reval="Boolean";
     break;
    case"char":
     reval="String";
     break;
    case"datetime":
     reval="System.DateTime";
     break;
    case"decimal":
     reval="System.Decimal";
     break;
    case"float":
     reval="System.Double";
     break;
    case"image":
     reval="System.Byte[]";
     break;
    case"money":
     reval="System.Decimal";
     break;
    case"nchar":
     reval="String";
     break;
    case"ntext":
     reval="String";
     break;
    case"numeric":
     reval="System.Decimal";
     break;
    case"nvarchar":
     reval="String";
     break;
    case"real":
     reval="System.Single";
     break;
    case"smalldatetime":
     reval="System.DateTime";
     break;
    case"smallint":
     reval="Int16";
     break;
    case"smallmoney":
     reval="System.Decimal";
     break;
    case"timestamp":
     reval="System.DateTime";
     break;
    case"tinyint":
     reval="System.Byte";
     break;
    case"uniqueidentifier":
     reval="System.Guid";
     break;
    case"varbinary":
     reval="System.Byte[]";
     break;
    case"varchar":
     reval="String";
     break;
    case"Variant":
     reval="Object";
     break;
    default:
     reval="String";
     break;
   }
   returnreval;
  }
我为何要找上面这篇文章呢。因为我在写程序时碰到了这样一件事:
昨天晚上写程序,程序如下:
using System;
using System.Data;
using System.Data.SqlClient;

namespace GetStudent
{
 /// <summary>
 /// Class1 的摘要说明
 /// </summary>
 class Class1
 {
  static void Main(string[] args)
  {
     
   string connstr = "server=(local);Initial Catalog=BYSJ;User ID =SA;Password=;";
   //SqlConnection conn = new SqlConnection(connstr); 
   SqlConnection conn = new SqlConnection();
   conn.ConnectionString = connstr;
   conn.Open();
   SqlCommand cmd = conn.CreateCommand();
   cmd.CommandText = "Select id, sName from student";
   SqlDataReader reader = cmd.ExecuteReader();
   string output;
   while(reader.Read())
   {
       output = string.Format("学生 {0}\t 的学号是 {1}",reader.GetString(1), reader.GetString(0));
    Console.WriteLine(output);
   }
   reader.Close();
   conn.Close();
  }
 }
}

但是发现编译过去了,但是却读不出数据来,而且有这样的提示:InvalidCastException。
我查了一下MSDN,发现这个出现的条件是指定的强制转换无效。然后发现要求:所检索的数据必须已经是字符串,所以我检查了一下数据库,把数据结构都改成了nvarchar,然后发现就可以了。真是经验啊。

 

posted @ 2013-08-09 16:00  zzlp  阅读(410)  评论(0编辑  收藏  举报