+"' and PassWord= '"+tbPassWord.Text.Replace("'", "''")+"'";
SqlCommand com = new SqlCommand(strSql,con);
方法
|
描述
|
Cancel
|
取消数据命令的执行
|
CreateParameter
|
创建一个新的参数
|
ExecuteNonQuery
|
执行命令并返回受影响的行数
|
ExecuteReader
|
执行命令并返回生成的DataReader
|
ExecuteScalar
|
执行查询并返回结果集中的第一行的第一列
|
ExecuteXmlReader
|
执行命令并返回生成的XMLReader
|
Prepare
|
在数据源上创建一个准备好的命令版本
|
{
SqlConnection con = new SqlConnection("Server=localhost; Integrated Security=SSPI; database=mydatabase");
SqlCommand cmdUpdateScore = new SqlCommand("UpdateScore",con);
cmdUpdateScore.Parameters.Add( new SqlParameter("@username", "周润发") );
cmdUpdateScore.Parameters.Add( new SqlParameter("@score", "700" ));
con.Open();
SqlTransaction trans = con.BeginTransaction();
cmdUpdateScore.Transaction=trans;
try
{
cmdUpdateScore.ExecuteNonQuery();
trans.Commit(); // No error so commit the transaction
}
catch
{
trans.Rollback(); // Rollback the update
}
{
public void DoDemo()
{
DataSet ds = new DataSet();
ExecuteOptions oExecute = new ExecuteOptions();
ds = oExecute.ExecuteandFill();
//Display all sales transactions on the console
//An action query doesnt generate any results for processing
oExecute.ExecuteNonQuery();
oExecute.ExecuteReader();
//Return the total number of sale transactions in the database
int nSum=oExecute.ExecuteScalar();
Console.WriteLine("Record count is " +nSum.ToString());
}
}
class ExecuteOptions
{
public SqlDataReader ExecuteReader()
{
SqlConnection con = new SqlConnection("Server=localhost; Integrated Security=SSPI; database=mydatabase; Max Pool Size=75; Min Pool Size=5");
SqlCommand cmdTitle = new SqlCommand("select Username,password,score from scoretable",con);
cmdTitle.CommandType=CommandType.Text;
con.Open();
dr =cmdTitle.ExecuteReader(CommandBehavior.CloseConnection);
return dr;
}
public int ExecuteScalar()
{
SqlConnection con = new SqlConnection("Server=localhost; Integrated Security=SSPI; database=mydatabase;Max Pool Size=75; Min Pool Size=5");
SqlCommand cmdTitleCount = new SqlCommand("select count(*) from scoretable",con);
cmdTitleCount.CommandType=CommandType.Text;
con.Open();
return Convert.ToInt32(cmdTitleCount.ExecuteScalar().ToString());
}
public void ExecuteNonQuery()
{
SqlConnection con = new SqlConnection("Server=localhost; Integrated Security=SSPI; database=mydatabase;Max Pool Size=75; Min Pool Size=5");
SqlCommand cmdUpdateSales = new SqlCommand("Update scoretable set score = score+200 where username='成龙'",con);
cmdUpdateSales.CommandType=CommandType.Text;
con.Open();
cmdUpdateSales.ExecuteNonQuery();
}
public DataSet ExecuteandFill()
{
SqlConnection con = new SqlConnection("Server=localhost; Integrated Security=SSPI; database=mydatabase;Max Pool Size=75; Min Pool Size=5");
SqlDataAdapter da = new SqlDataAdapter("select username, password,score from scoretable",con);
DataSet ds = new DataSet();
con.Open();
da.Fill(ds);
return ds;
}
Q:请问组合条件的查询能用存储过程吗?
A:可以啊。给一个网络上的例子供参考。
/*********************************************************************/
/* proc name : P_am_postjob_search */
/* */
/* Description: 申请单查询 */
/* */
/* parameters: @searchtime 申请时间 */
/* @search_poststatus 发布状态 */
/* @search_applystatus 招聘状态 */
/* @job_name 职位名 */
/* @Re_deptid 申请部门 */
/* date: 2003/11/5 */
/* */
/* history: */
/*********************************************************************/
create proc P_am_postjob_search
(
@searchtime varchar(5),
@search_poststatus char(1),
@search_applystatus char(1),
@job_name varchar(50),
@Re_deptid varchar(20)
)
as
declare @m_strSqlsearchtime varchar(255)
declare @m_strSqlpoststatus varchar(255) --Sql语句的条件部分
declare @m_strSqlapplystatus varchar(255) --Sql语句的条件部分
declare @m_strSqljob_name varchar(255) --Sql语句的条件部分
declare @m_strSqlRe_deptid varchar(255) --Sql语句的条件部分
select @m_strSqlsearchtime= case
when @searchtime='0' then /*申请时间*/
'select Re_NO,post_id,job_name,Re_num,Re_deptid,Re_applydate,job_poststatus,job_posttype,job_posttype,job_applystatus from am_postjob where 1=1'
else
'select Re_NO,post_id,job_name,Re_num,Re_deptid,Re_applydate,job_poststatus,job_posttype,job_posttype,job_applystatus from am_postjob where '+@searchtime+'>datediff(dd,Re_applydate,getdate())'
end
select @m_strSqlpoststatus= case
when @search_poststatus<>'n' /*发布状态*/
then ' and job_poststatus='''+@search_poststatus+''''
else ''
end
select @m_strSqlapplystatus= case
when @search_applystatus<>'n' /*招聘状态*/
then ' and job_applystatus='''+@search_poststatus+''''
else
''
end
select @m_strSqljob_name= case
when @job_name<>'' /*职位关键字*/
then ' and job_name like ''%'+@job_name+'%'''
else
''
end
select @m_strSqlRe_deptid
= case
when @Re_deptid<>'' /*申请部门ID*/
then ' and Re_deptid='''+@Re_deptid+''''
else
''
end
exec ( @m_strSqlsearchtime + @m_strSqlpoststatus + @m_strSqlapplystatus + @m_strSqljob_name + @m_strSqlRe_deptid +'order by post_id asc')
:能否详细讲解一下,自动增量冲突的解决办法?jyming22@sohu.com
A: 要避免这种情况,建议在使用数据源上自动增量的列以及 DataSet 上自动增量的列时,把 DataSet 中的列创建为 AutoIncrementStep 值等于 -1 并且 AutoIncrementSeed 值等于 0,另外,还要确保数据源生成的自动增量标识值从 1 开始,并且以正阶值递增。因此,DataSet 为自动增量值生成负数,与数据源生成的正自动增量值不冲突。另外一个选择是使用 Guid 类型的列,而不是自动增量的列。生成 Guid 值的算法应该永远不会使数据源中生成的 Guid 值与 DataSet 中生成的 Guid 值一样。
如果自动增量的列只是用作唯一值,而且没有任何意义,就考虑使用 Guid 代替自动增量的列。它们是唯一的,并且避免了使用自动增量的列所必需的额外工作。
:有关二制大对象Blob的使用。
A: 请参考如下代码:
Byte[] blob = null;
FileStream fs = null;
const string sConn = "server=(local);Initial
Catalog=Northwind;UID=ctester;PWD=password";
try {
SqlConnection conn = new SqlConnection(sConn);
SqlCommand cmd = new SqlCommand("SELECT Picture FROM Categories WHERE
CategoryName='Builder'", conn);
cn.Open();
SqlDataReader sdr = cmd.ExecuteReader();
sdr.Read();
blob = new Byte[(sdr.GetBytes(0, 0, null, 0, int.MaxValue))];
sdr.GetBytes[0, 0, blob, 0, blob.Length);
sdr.Close();
conn.Close();
fs = new FileStream("c:\\Builder.doc", FileMode.Create, FileAccess.Write);
fs.Write(blob, 0, blob.Length);
fs.Close();
} catch (SqlException e){
Console.WriteLine("SQL Exception: " + e.Message);
} catch (Exception e) {
Console.WriteLine("Exception: "+ e.Message);
}
请问怎么把一个表的数据,约束,父子表关系等一起赋值到数据集(或数据表),谢谢
A: 向 DataSet 添加多个结果集时,每个结果集都放在一个单独的表中。当创建 DataTable 对象时,Fill 操作通常只创建列名元数据。但是,你能通过设置数据适配器的MissingSchemaAction属性来重载Fill的默认的行为。例如,要使Fill建立的表包含主键信息、唯一约束、列属性、是否允许空值、列的最大长度、只读列、自动增加列等等,只需要指定DataAdapter.MissingSchemaAction为MissingSchemaAction.AddWithKey。作为选择,你能在调用DataAdapter.Fill前调用DataAdapter.FillSchema来确保数据集被填充时大纲已经准备好了。
调用FillSchema将再次访问服务器并检索附加的大纲信息。为了提高性能,最好指定数据集的大纲,或者在调用Fill前设置数据适配器的MissingSchemaAction。
怎么使用ADO.NET把Excel表到入数据库?
A: string strFileName ;//Excel文件名称
DataSet myDataset = new DataSet();
OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;"
+ "Data Source="+strFileName+";"+"Extended Properties='Excel 8.0;'");
OleDbCommand Command = new OleDbCommand("SELECT * FROM [Sheet1$]",con);
System.Data.OleDb.OleDbDataAdapter myData = new OleDbDataAdapter(Command);
myData.Fill(myDataset);
数据填充到DataSet中后,你就可以把它写入数据库了。