相关疑难解决方法(0)

是什么让SQL语句变得可思议?

根据定义(至少从我所见过的),sargable意味着查询能够使查询引擎优化查询使用的执行计划.我已经尝试过查找答案,但似乎没有太多关于主题的内容.所以问题是,什么做或不做一个SQL查询sargable?任何文件将不胜感激.

供参考:SARGable

sql-server performance

243
推荐指数
4
解决办法
7万
查看次数

参数化查询如何帮助SQL注入?

在查询1和2中,文本框中的文本都插入到数据库中.这里参数化查询的意义是什么?

1.> -------------

SqlCommand cmd = new SqlCommand("INSERT INTO dbo.Cars " +"VALUES(@TagNbr);" , conn);
cmd.Parameters.Add("@TagNbr", SqlDbType.Int);
cmd.Parameters["@TagNbr"].Value = txtTagNumber.Text;
Run Code Online (Sandbox Code Playgroud)

2.> --------------

int tagnumber = txtTagNumber.Text.ToInt16(); /* EDITED */
INSERT into Cars values(tagnumber.Text); /* then is it the same? */
Run Code Online (Sandbox Code Playgroud)

此外,在这里我将使用正则表达式验证来停止插入非法字符.

.net c# sql sql-server-2005 parameterized-query

52
推荐指数
4
解决办法
4万
查看次数

什么是防止SQL注入的好方法?

我必须为我的OJT公司编写应用程序管理系统.前端将在C#中完成,后端在SQL中完成.

现在我从未做过这个范围的项目; 在学校我们只有关于SQL的基础课.不知怎的,我们的老师完全没有讨论SQL注入,我现在才通过在网上阅读它来接触它.

所以无论如何我的问题是:你如何防止C#中的SQL注入?我隐约认为可以通过正确屏蔽应用程序的文本字段来完成它,以便它只接受指定格式的输入.例如:电子邮件文本框的格式应为"example@examplecompany.tld".这种方法是否足够?或者.NET是否有预定义的方法来处理这样的东西?我可以将过滤器应用于文本框,因此它只接受电子邮件地址格式或名称文本框,因此它不接受特殊字符吗?

c# sql security sql-injection

38
推荐指数
4
解决办法
8万
查看次数

ODBC参数占位符可以命名吗?

我做了一些搜索,但没有找到我的问题的确切答案.

有没有办法定义?SQL查询中哪个属于哪个参数?
例如,我需要执行以下操作:

SELECT * FROM myTable WHERE myField = @Param1 OR myField2 = @Param1 
       OR myField1 = @Param2 OR myField2 = @Param2
Run Code Online (Sandbox Code Playgroud)

相同的查询ODBC是:

SELECT * FROM myTable WHERE myField = ? or myField2 = ? or myField1 = ? 
       or myField2 = ?
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉ODBC命令哪个参数除了为每个值加载参数两次外?

我怀疑没有,但可以使用更有经验的ODBC程序员的观点.

编辑:我正在使用的ODBC驱动程序是BBj ODBC驱动程序.

c# sql odbc

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

使用SqlParameter创建Order By子句

我试图将我对SQL语句中的变量的所有引用移动到SqlParameter类,但由于某种原因,此查询失败.

string orderBy = Request.QueryString["OrderBy"];
//Fix up the get vars
if (orderBy == null)
    orderBy = "name ASC";

string selectCommand = "SELECT cat_id AS id, cat_name AS name FROM table_name ORDER BY @OrderBy";
SqlCommand cmd = new SqlCommand(selectCommand, dataConnection);
cmd.Parameters.Add(new SqlParameter("@OrderBy", orderBy));

//Create the SQLDataAdapter instance
SqlDataAdapter dataCommand = new SqlDataAdapter(cmd);

//Create the DataSet instance
DataSet ds = new DataSet();
//Get data from a server and fill the DataSet  
dataCommand.Fill(ds);
Run Code Online (Sandbox Code Playgroud)

这是错误

System.Data.SqlClient.SqlException:由ORDER BY编号1标识的SELECT项包含一个变量,作为标识列位置的表达式的一部分.只有在引用列名的表达式进行排序时,才允许使用变量.

它失败了.

dataCommand.Fill(ds);
Run Code Online (Sandbox Code Playgroud)

c# sql-server asp.net

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

避免字符串连接以创建查询

Martin Fowler在他的书"企业应用程序架构模式"中

一个好的经验法则是避免字符串连接将SQL查询放在一起

我经常使用这种做法,从查询的真实data中抽象出我的SQL查询的语法.

你能解释一下为什么这被认为是一种不好的做法吗?

sql

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

使用C#将DateTime插入SQL Server

我是C#ADO.NET和SQL的新手,有一个我无法想象的问题.我正在尝试DateTime使用C#插入SQL Server.我收到了消息

"从字符串转换日期和/或时间时转换失败"

当程序命中时cmd.ExecuteNonQuery();.对此的任何帮助真的很感激

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using AutoLotConnectedLayer;
using System.Configuration;
using System.Data;

namespace AutoLotCUIClient
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("***** The AutoLot Console UI *****\n");

            // Get connection string from App.config.
            string cnStr =
              ConfigurationManager.ConnectionStrings["AutoLotSqlProvider"].ConnectionString;
            //bool userDone = false;
            //string userCommand = "";

            // Create our InventoryDAL object.
            InventoryDAL invDAL = new InventoryDAL();
            invDAL.OpenConnection(cnStr);

            InsertNewCar(invDAL);

 #region Insert car
        private static void InsertNewCar(InventoryDAL invDAL)
        {
            // First …
Run Code Online (Sandbox Code Playgroud)

c#

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

如何修复MsSQL上的"无效列名"SQL异常

我试图在运行时传递代码中要检查的列名和值.但是我得到了:

"列名无效"

例外.代码如下:

cmd = new SqlCommand();
con.Open();
cmd.Connection = con;
cmd.CommandText = "INSERT INTO rezervasyon (Ad,Soyad,TelefonNo,OdaSayisi,Ki?iSayisi," +
                          "Ucret,Ac?klama,GirisTarihi,CikisTarihi,KayitTarihi) VALUES " +
                          "(" + isim + ",'" + soyisim + "','" + telefon + "'," +
                          "'" + oda_sayisi + "','" + kisi_sayisi + "','" + ucret + "'," +
                          "'" + aciklama + "','" + giris_tar + "','" + cikis_tar + "'," +
                          "'" + current_tarih + "')";
cmd.ExecuteNonQuery(); 
con.Close();
Run Code Online (Sandbox Code Playgroud)

c# sql database sql-server ado.net

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

'='附近的语法不正确.在System.Data.SqlClient.SqlConnection.OnError(SqlException异常

我有问题,当计算其电子邮件的数量列值,我从会话["电子邮件"]获得的电子邮件,然后我尝试并在int count =(int)cmd.ExecuteScalar();中发现错误,这是他们的错误消息"System = Data.SqlClient.SqlConnection.OnError(SqlException exception")附近的语法不正确.我需要计算来自我的表的数量.county_quantity的数据类型是float.

在此输入图像描述

 protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["email"] != null)
        {
            A();
            //lbltotalitemcart.Text = A().ToString();
        }
        else
        {
            lbltotalitemcart.Text = "login email first";
        }

    }
Run Code Online (Sandbox Code Playgroud)
 public int A()
    {
        String email = Request.QueryString["email"];
        string stmt = "SELECT COUNT(menu_quantity) FROM cart Where email=" + email + "";
        try
        {
            using (SqlConnection con = new SqlConnection(ConfigurationManager.
           ConnectionStrings["connectionString"].ConnectionString))
            {
                using (SqlCommand cmd = new SqlCommand(stmt, con))
                {
                    con.Open();
                    int count = (int)cmd.ExecuteScalar();
                    return count;
                }
            } …
Run Code Online (Sandbox Code Playgroud)

c# sql-server asp.net

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

如何在查询中将单引号添加为字符串?

我正在尝试使用文本框获取文件目标路径并将其传递到数据库中.(在Visual Studio中开发)当查询运行时,下面显示错误....

在此输入图像描述

该方法updateClarkuser类如下所示

public void updateClark(string _cid, string _path)
{
    SqlCommand cmd = new SqlCommand(@"UPDATE tbl_Path SET folder_path='" + _path + "' WHERE clark_id='" + _cid + "'", ConnectionDB.connection());
    cmd.ExecuteNonQuery();
}
Run Code Online (Sandbox Code Playgroud)

我在代码中遗漏了什么?

c# sql sql-server

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

如何将日期时间值传递给 SQL 而不会出现转换错误

我正在使用 Visual Basic.NET、SQL Server 2016、Visual Studio 2017 制作 Windows 窗体。

我一直在尝试解决这个问题,并且已经set dateformat mdy在 SQL Server Management Studio 查询中尝试过,但是表上的日期仍然采用这种格式:2022-07-17 00:00:00.000。在运行项目时尝试插入某些内容时,这与此错误有什么关系吗?

每个人都说“日期时间不适用于 yy/mm/dd 或 dd/mm/yy,请使用 mm/dd/yy”。但没有人说你如何在数据库或 Visual Studio 中实际更改/修复它。

当我在其他语言上学习和做事情时,我在使用 MySQL 时从未发现过这个错误,所以这个日期时间的事情真的变得令人绝望。非常感谢任何有关如何实际修复此错误的见解。

代码:

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim someid As Integer = TextCode.Text
            Dim descri As String = TextDescription.Text
            Dim somedate As DateTime = DateTimePickerinsert.Text
            Dim value As String = TextValue.Text
            Dim stock As String = TextStock.Text
            Dim warehouse As String = ComboWarehouse.Text
    
            con.Open() …
Run Code Online (Sandbox Code Playgroud)

vb.net sql-server datetimepicker

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