SQLCE常用方法总结

一:注意每次操作SQLCE前都Close一次,因为SQLCE2.0只支持一个连接;

二:检测数据库里是否存在某个表用:select table_name from Information_Schema.Tables;

三:SQLCE2.0 不支持存储过程、触发器等,都要用SQL来实现;

四:从XML转换过来的时间要转换一下:

        DateTime dt_c2 = DateTime.Parse(xn.ChildNodes[19].InnerXml);

        dt_c2.ToString("G"), //集装箱作业时间

五:SQLCE的字段类型和SQL Server的不一样,具体见SQLCE帮助文档

六:SQLCE不支持Distict 、top 等函数,Distinct可以用GroupBy来实现

七:SQLCE不支持如下语句:

select 'RT' = case when rt1 is not null then rt1 else '' end +
case when rt2 is not null then rt2 else '' end +
case when rt3 is not null then rt3 else '' end +
case when rt4 is not null then rt4 else '' end +
case when rt5 is not null then rt5 else '' end +
case when rt6 is not null then rt6 else '' end +
case when rt7 is not null then rt7 else '' end
from ct_bay

现在是用程序来实现连接的

八:数据库操作部分:

// execute sql, returns first column in first row as an int
private int ExecuteScalarInt(string sql)
{
   int result = 0;
   object o = this.ExecuteScalar(sql);
   if (o != System.DBNull.Value)
    result = Convert.ToInt32(o);
   return result;
}

// execute sql, returns first column in first row as a string
private string ExecuteScalarString(string sql)
{
   string result = String.Empty;
   object o = this.ExecuteScalar(sql);
   if (o != System.DBNull.Value)
    result = Convert.ToString(o);
   return result;
}

// execute sql, returns DataSet with result of query
// uses specified tableName for table in DataSet
private DataSet Execute(string tableName, string sql)
{
   DataSet ds = new DataSet();
   try
   {
    SqlCeDataAdapter da = GetAdapter(sql);
    da.Fill(ds, tableName);
   }
   catch (SqlCeException ex)
   {
    HandleError(ex);
   }
   catch (Exception ex)
   {
    HandleError(ex);
   }
   return ds;
}

// execute sql, returns number of rows affected
protected internal int ExecuteNonQuery(string sql)
{
   int count=0;
   try
   {
    SqlCeCommand cmd = GetCommand();
    cmd.CommandText = sql;
    count = cmd.ExecuteNonQuery();
   }
   catch (SqlCeException ex)
   {
    HandleError(ex);
   }
   catch (Exception ex)
   {
    HandleError(ex);
   }
   return count;
}

private SqlCeDataReader ExecuteDataReaderSingleRow(string sql)
{
   try
   {
    SqlCeCommand cmd = GetCommand();
    cmd.CommandType = CommandType.Text;
    cmd.CommandText = sql;
    m_dtr = cmd.ExecuteReader(CommandBehavior.SingleRow);
   }
   catch (SqlCeException ex)
   {
    HandleError(ex);
   }
   catch (Exception ex)
   {
    HandleError(ex);
   }
   return m_dtr;
}

// execute sql, returns the first column of the first row
private object ExecuteScalar(string sql)
{
   object result=null;
   try
   {
    SqlCeCommand cmd = GetCommand();
    cmd.CommandText = sql;
    result = cmd.ExecuteScalar();
   }
   catch (SqlCeException ex)
   {
    HandleError(ex);
   }
   catch (Exception ex)
   {
    HandleError(ex);
   }
   return result;
}


//
// private helper functions
//

private void OpenConnection()
{
   // make sure we have open connection
   if (m_con == null)
    m_con = new SqlCeConnection(@"Data Source=\Program Files\ChinaTallyPDACSharp\ChinaTallyDB.sdf;");

   if (m_con.State == ConnectionState.Closed)
    m_con.Open();
}
  

// return command object
private SqlCeCommand GetCommand()
{
   OpenConnection();

   // create command object
   if (m_cmd == null)
   {
    m_cmd = new SqlCeCommand();
    m_cmd.Connection = m_con;
    m_cmd.CommandType = CommandType.Text;
   }
  
   m_cmd.CommandText = String.Empty;
   return m_cmd;
}

// return data adapter
private SqlCeDataAdapter GetAdapter(string sql)
{
   // make sure we have open connection
   if (m_con == null)
    m_con = new SqlCeConnection(@"Data Source=\Program Files\ChinaTallyPDACSharp\ChinaTallyDB.sdf;");

   if (m_con.State == ConnectionState.Closed){
    try{
     m_con.Open();
    }
    catch(SqlCeException ex){
                    throw ex;
    }
   }
   SqlCeDataAdapter scda = new SqlCeDataAdapter(sql, m_con);
   return scda;
}

转自: http://www.jucoder.com/bbs/thread-13477-0-0.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值