标签: sqlcommand

如何将变量传递给SqlCommand语句并插入到数据库表中

我正在用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)

谢谢

c# sql sqlcommand executenonquery

2
推荐指数
1
解决办法
3万
查看次数

SqlCommand.Parameters.AddWithValue注入安全吗?

SqlCommand.Parameters.AddWithValue方法注射安全吗?

它接受Object有效载荷,所以它如何防止注入?

.net parameters sql-injection sqlcommand sql-parametrized-query

2
推荐指数
1
解决办法
2325
查看次数

在WHERE子句中处理可选参数

我正在处理一个Web表单,它接收一个包含带SQL参数的SQL查询语句的字符串.它为每个参数生成一个ASP.NET控件,然后将每个控件的值分配给将用于SqlCommand填充a 的SQL查询字符串的参数DataAdapter.

我有一些问题来管理可选参数.

防爆.

1)将字符串传递给页面:

string query = "SELECT * FROM Table WHERE Field1=@P1 AND field2=@P2";
Run Code Online (Sandbox Code Playgroud)

2)为每个参数生成Web控件

TextBox P1 = new TextBox();
P1.ID = "P1";
...
TextBox P2 = new TextBox();
P2.ID = "P2";
...
PanelParameters.Controls.Add(P1);
PanelParameters.Controls.Add(P1);
Run Code Online (Sandbox Code Playgroud)

3)点击时将每个参数的值传递给SqlCommandas参数:

SqlCommand cmd = new SqlCommand(query, conn);

cmd.Parameters.AddWithValue("@P1", P1.Text);

cmd.Parameters.AddWithValue("@P2", P2.Text);
Run Code Online (Sandbox Code Playgroud)

4)就在这里,没关系!

但如果参数是可选的,我该如何管理呢?

如果P2是可选的,则用户无法编译它,在这种情况下我不想设置P2 = NULL(设置参数的值DbNull.Value),但我希望P2将从查询SQL中消失.

你能帮助我吗?

*更新* 我无法编辑我收到的查询,因为它包含非常复杂的SQL语句.

c# sql asp.net sqlcommand

2
推荐指数
1
解决办法
1642
查看次数

在多个查询的同一代码中使用相同的SQLCommand实例多次?

我有问题使用为什么我不能在同一代码中多次使用相同的SQLCommand实例?

我在这里尝试了代码并且它对gridview运行良好但是当我通过使用cmd.CommandText()方法更改查询时它会一直说:

已经有一个与此命令关联的打开DataReader,必须先关闭它.

这是代码:

string cs = ConfigurationManager.ConnectionStrings["MyDB"].ConnectionString;
SqlConnection con = new SqlConnection(cs);

try
{
    SqlCommand cmd = new SqlCommand();
    cmd.Connection = con;
    con.Open();
    cmd.CommandText = "Select top 10 FirstName, LastName, Address, City, State from Customers";

    GridView1.DataSource = cmd.ExecuteReader(); 
    GridView1.DataBind();


    cmd.CommandText = "SELECT TOP 10 COUNT(CreditLimit) FROM Customers";
    int total = (int)cmd.ExecuteScalar();
    TotalCreditLble.Text = "The total Credit :" + total.ToString();

}
catch(Exception exp)
{
    Response.Write(exp.Message);
}
finally
{
    con.Close();
}
Run Code Online (Sandbox Code Playgroud)

c# sqlcommand

2
推荐指数
2
解决办法
1518
查看次数

在C#中的SQL查询中将字符串数组作为参数传递

在我用C#编写的应用程序中,我正在编写一个SQL查询.以下是查询

SELECT [Resource No_] where [Resource No_] In (@resources) 
Run Code Online (Sandbox Code Playgroud)

@resources 是具有一个或多个一个字符串的用户输入参数.

我的查询失败而没有显示错误

根据我的说法,查询失败,因为@resources正在传递参数跟随

"'123,'124','125'"
Run Code Online (Sandbox Code Playgroud)

(在开头和结尾两个引号,这是我的查询失败).

[Resource No_]NVARCHAR数据库中的类型.

谷歌搜索后,我已经找到了一些关于这个主题的帮助,但所有这些都适用[Resource No_] 于类型Integer

c# sql-server sqlcommand sqlcommandbuilder

2
推荐指数
1
解决办法
2万
查看次数

SQL检查表是否存在于C#中,如果不存在则创建

我想我几乎看到了与这个问题相关的每一页,最可能的答案是 检查SQL表是否存在 但是并不是真的理解它.这就是我得到的:

    private void select_btn_Click(object sender, EventArgs e)
    {
        string theDate = dateTimePicker1.Value.ToString("dd-MM-yyyy");
        SqlConnection SC = new SqlConnection("Data Source=ruudpc;Initial Catalog=leden;Integrated Security=True");
        SqlCommand DateCheck = new SqlCommand("SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = '" + theDate + "'");
    }
Run Code Online (Sandbox Code Playgroud)

现在我想要DateCheck.ExecuteScalar()的返回值; 这可以告诉我它是否存在,可能很简单.

编辑

无论是sql注入部分,对于某些人来说这个问题是有帮助的,通常不好的做法是动态创建表,我建议你重新考虑你的ERD.只是说.

c# sql sql-server sqlcommand information-schema

2
推荐指数
1
解决办法
2万
查看次数

SqlParameter - 设置为默认值

如何将SqlParameter的值设置为相当于 SQL INSERT 语句的DEFAULT关键字?

MSDN 文档说“使用 null 或不设置 Value 以使用参数的默认值”。但是,执行任一操作都会导致 SqlException 抱怨未提供预期参数。我也尝试将参数设置为 DBNull.Value 但这导致抱怨不允许空值。

这样做的正确方法是什么?

-- table schema
CREATE TABLE SomeTable (Field INT NOT NULL DEFAULT(1));


using (var command = this.conn.CreateCommand())
{
    command.CommandText = "INSERT [dbo].[SomeTable] ([Field]) VALUES (@p0);";

    var param = new SqlParameter();
    param.ParameterName = "@p0";
    //param.Value = ??;
    command.Parameters.Add(param);

    command.ExecuteNonQuery();
}
Run Code Online (Sandbox Code Playgroud)

.net sqlcommand sqlparameter

2
推荐指数
1
解决办法
1066
查看次数

使用 VB.NET 更新 SQL 数据库

代码没有抛出任何错误,只是没有执行语句

    Private Sub Update_Program(item As Programme)
    'Set Command
    SchoolTypes.Connexion.Open()
    item.Command = New SqlClient.SqlCommand("UPDATE T_Programme Set  pro_nom='@nom' , pro_nbr_unites=@nom , pro_nbr_heures=@unit WHERE pro_no ='@no'", SchoolTypes.Connexion)

    ''Add Parameter
    item.Command.Parameters.Add("@no", SqlDbType.VarChar, 6)
    item.Command.Parameters.Add("@nom", SqlDbType.VarChar, 50)
    item.Command.Parameters.Add("@unit", SqlDbType.Float)
    item.Command.Parameters.Add("@heures", SqlDbType.Int)
    ''''Set Values
    item.Command.Parameters("@no").Value = item.Pro_No
    item.Command.Parameters("@nom").Value = item.Pro_Nom
    item.Command.Parameters("@unit").Value = item.Pro_Nbr_Unit
    item.Command.Parameters("@heures").Value = item.Pro_Nbr_Heure

    Try
        If item.Command.ExecuteNonQuery() > 0 Then
            MsgBox("Modifier avec Succes!")
        End If
        SchoolTypes.Connexion.Close()
    Catch ex As Exception
        err.ShowDetails(System.Reflection.MethodBase.GetCurrentMethod(), ex)
    End Try
End Sub
Run Code Online (Sandbox Code Playgroud)

我已经测试了我的命令,它适用于 sql 但不适用于程序......

这是我的数据库数据库的粘贴

vb.net sqlcommand

2
推荐指数
1
解决办法
3万
查看次数

SQL查询结果到数组/列表

以下是用于查询数据库以获取用户ID列表的C#代码:

int id;
con = new SqlConnection(Properties.Settings.Default.ConnectionStr);
con.Open();
id = 180;
SqlCommand command = new SqlCommand("Select userid from UserProfile where grpid=@id", con);
command.Parameters.AddWithValue("@id", id);

using (SqlDataReader reader = command.ExecuteReader())
{
    if (reader.Read())
    {
        Console.WriteLine(String.Format("{0}", reader["userid"]));
    }
}

con.Close();
Run Code Online (Sandbox Code Playgroud)

产量:5629

实际上,名单Usersgrpid = 1805629,5684,5694.

如何在列表或数组中读取结果?

c# sql sqlcommand

2
推荐指数
2
解决办法
1416
查看次数

SQL - 如何用单个未来的日期时间替换一系列日期时间?

这是一个基本的SQL日期时间问题,但我不想弄乱我的数据库!

例如,在MySQL数据库中,如果我想在我的一个表中的单个列中替换日期X和日期Y之间的所有日期时间值 - 那么SQL命令是做什么的?示例:我想将本月1月的所有日期时间值替换为3月份的未来日期/时间.

由于其他StackOverflow问题,我知道如何选择一系列日期时间 - 例如:

select * from table where DatetimeField between '22/02/2009 09:00:00.000' and '23/05/2009 10:30:00.000'
Run Code Online (Sandbox Code Playgroud)

但是如何添加replace()函数呢?

在此先感谢您的帮助 - 我已经进行了数据库备份以防万一!

mysql sql datetime replace sqlcommand

1
推荐指数
1
解决办法
2145
查看次数