SqlConnection conn=new SqlConnection(“Data Source=xx;Initial Catalog=databasexxx;Integrated Security=True;" providerName="System.Data.SqlClient”);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = new SqlCommand();
da.SelectCommand.Connection = conn;
da.SelectCommand.CommandText = "NameOfProcedure";
da.SelectCommand.CommandType = CommandType.StoredProcedure;
param = new SqlParameter("@ParameterName", SqlDbType.DateTime);
param.Direction = ParameterDirection.Input;
param.Value = Convert.ToDateTime(inputdate);
da.SelectCommand.Parameters.Add(param);
da.Fill(table);
//如果不是select就该使用
da.InsertCommand.ExecuteNonQuery();

    但是,如果每次使用存储过程都设置Parameters的话,就比直接使用SQL语句更加复杂了,所以我就想到了下面的方法:

SqlConnection conn=new SqlConnection(“xxxxxxxxx”);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = new SqlCommand();
da.SelectCommand.Connection = conn;
da.SelectCommand.CommandText = "NameOfProcedure @username='username'"
da.SelectCommand.CommandType=CommandType.StoredProcedure;
da.Fill(table);
//如果不是select就该使用
da.InsertCommand.ExecuteNonQuery();

区别在于CommandText修改为带@的格式了,但是我测试了很多次,结果都在ExecuteNonQuery的时候报错:“没有存储过程 xxxxx ”,我上网也查过资料,发现很多人出现了类似的情况,有的是因为没有选对数据库,将存储过程记录到了Master或者其他的数据中了,还有的是没有执行成功Create Procedure的,就是没有发现有人遇到我这样的情况,开始我怀疑真的没有把存储过程记录到数据库中,我就把存储过程后面的@username。。。去掉了,缺参数的情况下执行,结果报错“存储过程xxx缺少参数”,可以肯定的是,存储过程已经记录到了SQL Server上面,只是格式的问题了,我也怀疑是否可能是username是关键字?加了中括号,还是不行,因为username根本就不是SqlServer的关键字,能改的都改了,最后能改的只能是CommandType了,我想类型不会是Text吧?结果一试,类型改为Text后,居然存储过程执行通过了!让我感觉摸不到头脑,但是的确是通过了,后来我也改回过StoredProcedure,并把参数改为Parameters的方式进行定义,结果还是不能通过,提示的还是未定义存储过程。

    问题已经解决了,但是不知道为什么该是这样。觉得很郁闷。如果有高手知道这其中的原因,希望能给小弟个回答。