2012-04-19 4 views
4

데이터베이스에 명령을 보내야합니다. 내가 영향을받는 테이블에있는 모든 필드의 이름과 데이터 형식을 알고, 나는 그것을 사용하여 명령을 생성해야합니다. 내 유일한 문제는 TSQL 따옴표가 필요한 데이터 형식의 열 값을 결정하는 것입니다 - 예를 들어, 필드를 문자열 varchar 형식 인 경우, 나는 그것을 인용해야 할 수도 있지만 그것은 int, 5 경우 그것을 인용 할 필요는 없다.값을 따옴표로 묶어야하는 SQL 데이터 유형을 결정 하시겠습니까?

다음 코드와 같은 것을 사용할 수는 있지만 매우 비효율적 인 것처럼 보입니다. 누군가가이 일을 더 잘 수행 할 수있게 해줄 수 있습니까? SQL 서버 또는 C# 기능을 사용하여 가능합니까?

public string QuoteStringIfDatatypeRequires(string columnName) 
{ 
    if (DataTypes[columnName].Contains("date") || DataTypes[columnName].Contains("time") || 
     DataTypes[columnName].Contains("char") || DataTypes[columnName].Contains("text") || 
     DataTypes[columnName].Contains("binary") || DataTypes[columnName].Contains("image")) 
    { 
     return "'" + columnName + "'"; 
    } 

    return columnName; 
} 
+11

이것은 SQL 인시던트 사고가 발생하기를 기다리는 것일뿐입니다. ** [매개 변수가있는 쿼리] (http://blogs.msdn.com/b/sqlphp/archive/2008/09/30/how-and-why-to-use-parameterized-queries.aspx) 사용에 대해 생각해 보셨습니까? ** 대신? –

+0

'columnName'을 나타내는 것은 무엇입니까? 표 또는 열의 이름에 삽입 할 값? 정말로 당신이하려는 일을 이해하지 못합니다. – Steve

+0

매개 변수화 된 쿼리를 살펴본 결과 작동합니다. 나는 C#에 익숙하지 않아서 내가 무엇을 요구하고 있는지 정말로 알지 못했다. 타이머가 만료되면 그 대답을 받아 들일 것입니다. –

답변

5

모든 것을 인용 할 수 있으며 데이터베이스 자체에서 적절한 데이터 유형으로 변환됩니다.

하지만 잘못된 것입니다.

command.Parameters.AddWithValue("@name", value); 

또는

command.Parameters.Add("@name", type, size).Value = value; 

MSDN를 참조하십시오대로 대신 당신은 매개 변수화 된 쿼리를 사용하여 값을 보내야합니다.

관련 문제