我正在用C#编写一个小程序,它使用SQL在运行时根据用户的输入将值存储到数据库中.
唯一的问题是我无法弄清楚正确的Sql语法将变量传递到我的数据库.
private void button1_Click(object sender, EventArgs e)
{
int num = 2;
using (SqlCeConnection c = new SqlCeConnection(
Properties.Settings.Default.rentalDataConnectionString))
{
c.Open();
string insertString = @"insert into Buildings(name, street, city, state, zip, numUnits) values('name', 'street', 'city', 'state', @num, 332323)";
SqlCeCommand cmd = new SqlCeCommand(insertString, c);
cmd.ExecuteNonQuery();
c.Close();
}
this.DialogResult = DialogResult.OK;
}
Run Code Online (Sandbox Code Playgroud)
在这段代码中我使用了所有静态值,除了我试图传递给数据库的num变量.
在运行时我收到此错误:
A parameter is missing. [ Parameter ordinal = 1 ]
Run Code Online (Sandbox Code Playgroud)
谢谢
运行Enterprise Library 5.0的示例,当我使用ExecuteNonQuery运行更新sproc时,它返回2.更新基于ProductID,表的主键(是的,我检查过,它是唯一的).
这是简单的sproc:
ALTER PROCEDURE [dbo].[UpdateProductsTable]
@ProductID int,
@ProductName varchar(50) = NULL,
@CategoryID int = NULL,
@UnitPrice money = NULL
AS
BEGIN
UPDATE Products
SET
ProductName = @ProductName,
CategoryID = @CategoryID,
UnitPrice = @UnitPrice
WHERE ProductID = @ProductID
END
Run Code Online (Sandbox Code Playgroud)
在SSMS中执行此sp在查询结果窗口的右下角显示"1行",并在网格中返回0.单击消息选项卡显示
(1 row(s) affected)
(1 row(s) affected)
(1 row(s) affected)
Run Code Online (Sandbox Code Playgroud)
不知道为什么我在这里看到这3次,但我不相信这是问题所在.
这是调用sp的代码:
public static void Exec_Update_Query()
//updates a column of a single row, checks that the update succeeded, and then update it again to return it to the original value …Run Code Online (Sandbox Code Playgroud) 我正在使用Visual Studio 2008 c#构建数据库,当我尝试将新记录插入到我的数据库中时,它似乎ExecuteNonQuery尚未初始化.我复制我的代码,希望任何人都能帮助我,因为我是新手.
private void button1_Click(object sender, EventArgs e)
{
SqlConnection cn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Usuario\Documents\Visual Studio 2010\Projects\Nova\Nova\Database1.mdf;Integrated Security=True;User Instance=True");
SqlCommand cmd = new SqlCommand();
cn.Open();
cmd.CommandText = "insert into Database1.mdf(Codigo,Nombre,Cantidad,Tipo) values('"+comboBox1.Text+"','"+textBox3.Text+"','"+textBox1.Text+"','"+comboBox2.Text+"')";
cmd.ExecuteNonQuery();
cmd.Clone();
cn.Close();
MessageBox.Show("Acabas de agregar un producto");
}
Run Code Online (Sandbox Code Playgroud) 我有一个创建表的脚本(*.sql).我正在使用Visual Studio 2010和npgsql来访问postgres数据库.
我可以从代码隐藏中执行脚本吗?
这是我尝试过的代码:
string sqlConnectionString = @"myconnection";
FileInfo file = new FileInfo(@"myfile.sql");
string script = file.OpenText().ReadToEnd();
NpgsqlConnection conn = new NpgsqlConnection(sqlConnectionString);
Server server = new Server(new ServerConnection(conn));
server.ConnectionContext.ExecuteNonQuery(script);
file.OpenText().Close();
Run Code Online (Sandbox Code Playgroud)
但是Visual Studio不承认Server.
我正在尝试将值添加到数据库中,但每次我尝试添加一些东西时,我都会收到错误ExecuteNonQuery()消息" 连接必须有效且打开. "而且我不知道该怎么办!!!
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
namespace ClientesClinica
{
public partial class frmCadastro : Form
{
MySqlConnection conect = new MySqlConnection("server = localhost; user id = root; database = clientes; password = '';");
public frmCadastro()
{
InitializeComponent();
}
private void frmCadastro_Load(object sender, EventArgs e)
{
}
private void btnCancela_Click(object sender, EventArgs e)
{
Close();
}
private void btnSalvar_Click(object sender, EventArgs e) …Run Code Online (Sandbox Code Playgroud) 我目前正在使用SQL Server 2014中的C#脚本更新和读取值.当使用SQlCommand执行InitQuery时,它会在运行脚本时弹出错误:
IndexOutOfRangeException:数组索引超出范围.
Mono.Data.Tds.Protocol.TdsComm.AppendInternal(Int16 s)
Mono.Data.Tds.Protocol.TdsComm.Append(System.String s)
Mono.Data.Tds.Protocol.Tds70.WriteRpcParameterInfo(Mono.Data.Tds. TdsMetaParameterCollection参数)
Mono.Data.Tds.Protocol.Tds70.ExecRPC(TdsRpcProcId rpcId,System.String sql,Mono.Data.Tds.TdsMetaParameterCollection参数,Int32超时,布尔值wantResults)
Mono.Data.Tds.Protocol.Tds70.Execute( System.String commandText,Mono.Data.Tds.TdsMetaParameterCollection参数,Int32 timeout,Boolean wantResults)
System.Data.SqlClient.SqlCommand.Execute(Boolean wantResults)
System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
(wrapper remoting-invoke- with-check)
System.Data.SqlClient.SqlCommand:ExecuteNonQuery()
Database.DataBaseConnection.Update()(在Assets/DataBaseConnection.cs:674)
我计算了SqlCommand它有多少个字符,它是8,125个字符(没有空格),10,874个字符(带空格).
有198个参数,但我想这不是由于那个,因为在某处我读到单个查询的最大参数量是2000,我是对的吗?
我减少了参数的数量(直到20个参数),因此,命令长度和它的作用就像一个魅力(875个字符没有空格和1,221个字符带空格).
总而言之,我的问题是:SqlCommandSQL Server 2014中查询的最大长度是多少?在SQL Server 2008中?
我的代码示例:
//New command to update values in input table in sql server
using (SqlCommand command = new SqlCommand("UPDATE DigitalInputs" +
" SET Value = CASE Name" +
" WHEN @LI_Input_Variable1_Name THEN @LI_Input_Variable1_Value" +
" WHEN @LI_Input_Variable2_Name THEN @LI_Input_Variable2_Value" +
" WHEN @LI_Input_Variable3_Name …Run Code Online (Sandbox Code Playgroud) sql sql-server monodevelop unity-game-engine executenonquery
假设我们执行一个DROP TABLE X通过一个ExecuteNonQuery并且一切运行正常(毫无例外),它将返回什么?
你能告诉我这段代码有什么问题吗?
我是否需要使用DataAdapter插入表格?
我知道没问题connectionString,因为我在Server Explorer上测试了它.
Dim mydao As New Connection
Dim connectionString As String = mydao.GetConnectionString()
Dim connection As New SqlConnection(connectionString)
Dim cmd As New SqlCommand
Public Function add(ByVal area As String, ByVal user As String) As Integer
cmd.CommandText = "INSERT into Area (Area, user) VALUES ('" + area + "','" + user + "')"
Try
connection.Open()
Dim cant As Integer = cmd.ExecuteNonQuery()'it throws exception here
connection.Close()
Return cant
Catch ex As Exception
Console.WriteLine(ex.Message)
Return 0
End …Run Code Online (Sandbox Code Playgroud) 我试图在ASP C#与CLR 4.5中使用Oracle连接运行非查询.这是我的代码:
string connectionString = ConfigurationManager.ConnectionStrings["OracleConnectionString1"].ConnectionString;
OracleConnection conn = new OracleConnection(connectionString);
conn.Open();
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "update SALES_ADVENTUREWORKS2012.SALESORDERDETAIL set UNITPRICEDISCOUNT=0 where ROWGUID='4A399178-C0A0-447E-9973-6AB903B4AECD'";
cmd.CommandType = CommandType.Text;
cmd.CommandTimeout = QUERY_TIMEOUT;
int row_affected = cmd.ExecuteNonQuery();
HttpContext.Current.Response.Write("Rows affected:" + row_affected + "<br/>");
conn.Close();
Run Code Online (Sandbox Code Playgroud)
当我在oracle开发工具中运行查询时,它工作正常.当我使用上面的asp代码时,它会在执行查询时冻结.即使我使用5秒超时,它也会永远冻结.我尝试过使用托管和非托管的oracle库; 两者都表现相同.请注意,使用填充或标量查询工作完全正常,因此我的连接字符串没有任何问题.此外,oracle开发可以执行此更新查询的事实证明这不是权限问题.
有任何想法吗?
我正在尝试在C#中执行SQL请求,以了解用户是否已在我的数据库中注册.为此,我使用以下源代码:
public bool pseudoDispo(string pseudo)
{
// Ouverture de la connexion SQL
this.OpenConnection();
// Création d'une commande SQL en fonction de l'objet connection
MySqlCommand cmd = this.connection.CreateCommand();
cmd.CommandText = "SELECT COUNT(*) FROM `user` WHERE `pseudo` = '" + pseudo + "'";
int test = cmd.ExecuteNonQuery();
MessageBox.Show(test.ToString());
// Exécution de la commande SQL
if (cmd.ExecuteNonQuery() == 1)
{
this.connection.Close();
MessageBox.Show("Registered");
return true;
}
else
{
this.connection.Close();
MessageBox.Show("Not Registered");
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
但问题是MySqlCommand.ExecuteNonQuery()总是返回-1而我不知道为什么.我的请求似乎有效,因为它在phpmyadmin上返回了我的好结果(如果已注册,则返回1,如果没有则返回0).
有人帮我解释一下,我做错了吗?
谢谢!
编辑:我一直试图通过使用ExecuteScalar()以另一种方式完成我的功能,但现在我遇到了一些麻烦,因为它总是让我回归0.我显然不明白,但我甚至不知道是什么......我可以获得有关ExecuteScalar()和那种函数的更多信息吗?我试图将它转换为字符串,似乎cmd请求Int64.所以我更新了我的代码,但它仍然无效.我对自己缺乏知识感到非常沮丧,但无论如何,这是代码:
public …Run Code Online (Sandbox Code Playgroud) executenonquery ×10
c# ×6
sql ×4
asp.net ×2
insert ×2
mysql ×2
sql-server ×2
c#-4.0 ×1
database ×1
monodevelop ×1
npgsql ×1
oracle ×1
sqlcommand ×1
vb.net ×1