sqldataparameter一般是用来传参数给sqlcommand的params,但sqlcommand不用sqldataparameter作为参数直接在sql语句中写什么insert into student values(name,gener),而不是写成含sqldataparameter形式insert into student values(@name,@gener);这两种都行吗?两种方法有什么区别,好处个在哪里。是不是存储过程只能用sqlparamter,而在文本中传参数两种都行。还有sqldataparameter中参数写到sql中一定要带@号吗?可以用什么方法改吗?有什么意见都提出来。。,好的就加分
存储过程都是用sqlparamter,但不用存储过程也很多人用sqlparamter。他好处在哪????
/// <summary>
/// 批量记录的插入操作,即可一次向多张表中插入不同的批量记录
/// </summary>
/// <param name="ds">批量记录组成的dataset,dataset中的各个datatable名为表名,各datatable中的datacolumn名为列名</param>
public static void insertset(ref dataset ds)
{
factory factory = factory.getinstance();
abstractdbfactory abstractdbfactory = factory.createinstance();
idbconnection concretedbconn = abstractdbfactory.createconnection();
concretedbconn.connectionstring = abstractdbfactory.getconnectionstring();
concretedbconn.open();
idbcommand concretedbcommand = abstractdbfactory.createcommand();
idbtransaction concretedbtrans = abstractdbfactory.createtransaction(concretedbconn);
concretedbcommand.connection = concretedbconn;
concretedbcommand.transaction = concretedbtrans;
try
{
foreach(datatable dt in ds.tables)
{
foreach(datarow dr in dt.rows)
{
string strsql = "insert into " + dt.tablename + " (";
for(int i = 0; i < dt.columns.count - 1; i++)
{
strsql += (dt.columns[i].caption + ", ");
}
strsql += (dt.columns[dt.columns.count - 1].caption + ") values ('");
for(int i = 0; i < dt.columns.count - 1; i++)
{
strsql += (dr[i] + "', '");
}
strsql += (dr[dt.columns.count - 1] + "')");
concretedbcommand.commandtext = strsql;
concretedbcommand.executenonquery();
}
}
concretedbtrans.commit();
}
catch
{
concretedbtrans.rollback();
throw;
} finally
{
concretedbconn.close();
}
concretedbcommand.executenonquery();
}
}
concretedbtrans.commit();
}
catch
{
concretedbtrans.rollback();
throw;
} finally
{
concretedbconn.close();
}
没有深入在性能和机制上研究过两种的优缺点.就普通的应用而言,有个人的习惯,一般如果是直接写SQL语句而不用存储过程的话,如果比较传统或者简单的SQL语句,那么一般是用传参的形式,讲究规范性,可读性以及可维护性,而且参数形式还可以自动匹配数据类型,在健壮性上也比较好.
如果是要做SQL语句的拼接的话,那么不用参数直接拼接就显的更加方便和直观.
这是我的使用习惯.
对于@嘛,我至尽没看见过调用存储过程时不用的,因为他是个特殊符号,用来标记这个变量在存储过程中是一个参数变量,他在存储过程中是要声明
-------------
行.
两种方法有什么区别,好处个在哪里。
-------------
写存储教程是写在数据库里.
便于修改维护.
如一个项目发布了,发现有一个sql语句错误.要是不是写在存储教程中.
还得现到页面找,改后重新发布.
如写在存储教程中,直接到数据库里面改就可以了.
再有安全性好,防止sql注入.