C#动态SQL INSERT … SELECT
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#动态SQL INSERT … SELECT,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1793字,纯文字阅读大概需要3分钟。
内容图文
![C#动态SQL INSERT … SELECT](/upload/InfoBanner/zyjiaocheng/908/18c56c0036bd4d449d9968e0bf9014a6.jpg)
我使用INSERT … SELECT语法从表中选择现有行,然后插入到另一个表中.除了每行的现有数据外,我还需要添加BillingID和TimeStamp.因为这些字段位于SQL语句的SELECT部分??,所以我无法对它们进行参数化.我使用SQL函数NOW()解决了TimeStamp问题,但是我仍然使用BillingID,我通过sting concatenation添加到查询中,如下所示:
static void UpdateMonthlyData(int BillingID, DateTime HistoryDate, int CompanyID)
{
String conString = ConfigurationManager.ConnectionStrings["xxx"].ConnectionString;
MySqlConnection connection = new MySqlConnection(conString);
String command = "INSERT INTO MonthlyData SELECT " + BillingID + ", d.*, NOW() "
+ "FROM CurrentData d WHERE d.CompanyID = @CompanyID AND d.HistoryDate = @HistoryDate";
MySqlCommand cmd = new MySqlCommand(command, connection);
cmd.Parameters.Add(new MySqlParameter("@CompanyID", CompanyID));
cmd.Parameters.Add(new MySqlParameter("@HistoryDate", HistoryDate));
cmd.CommandType = CommandType.Text;
cmd.Connection.Open();
cmd.ExecuteNonQuery();
cmd.Connection.Close();
}
我不关心SQL注入,因为这是一个控制台应用程序,它是在自动计划上运行的,没有任何用户交互. (BillingID是自动生成的).尽管如此,我不喜欢使用连接字符串,因为它们不是很易读.有更优雅的方式吗?
编辑:
总而言之,我认为既然你不能这样做:
SELECT @field FROM @table
我假设在SQL语句的SELECT部分??中不允许使用参数.但是因为我在select语句中指定了一个值而不是选择一个列,因为@cdhowie指出我可以在那里使用一个参数.从本质上讲,我的查询翻译是这样的:
SELECT 25 FROM table_name, not SELECT field FROM table_name
所以现在感谢@cdhowie我明白参数可以是字面值的任何位置
解决方法:
假设查询参数的类型正确,则查询参数在文字值的任何位置都有效(例如,只要绑定整数,LIMIT @Foo就可以工作 – 或者SQL服务器可以成功转换的内容到整数 – 到Foo参数).当然,这假设您正在使用的SQL方言中没有特别的怪癖.
换句话说,没有理由不能使用查询参数传递BillingID.
内容总结
以上是互联网集市为您收集整理的C#动态SQL INSERT … SELECT全部内容,希望文章能够帮你解决C#动态SQL INSERT … SELECT所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。