![]()
The error System.Data.SqlClient.SqlException – Cannot convert nvarchar to int occurs when SQL Server attempts to implicitly or explicitly convert a string (NVARCHAR) value to an integer (INT) but fails because the string value cannot be interpreted as a valid integer. This typically happens when:
- The string contains non-numeric characters (e.g., letters, symbols).
 - The string is empty or 
NULL. - The data types in a comparison or operation are mismatched.
 
Common Causes
- Non-Numeric Characters in String:
 
- The 
NVARCHARvalue contains characters that cannot be converted to an integer. - Example:
sql SELECT CAST('ABC123' AS INT); -- Error: 'ABC123' is not a valid integer 
- Empty or NULL String:
 
- The 
NVARCHARvalue is empty orNULL, which cannot be converted to an integer. - Example:
sql SELECT CAST('' AS INT); -- Error: Empty string SELECT CAST(NULL AS INT); -- Error: NULL value 
- Mismatched Data Types in Comparison:
 
- Comparing an 
NVARCHARcolumn with anINTvalue without explicit conversion. - Example:
sql SELECT * FROM Employees WHERE Age = '30'; -- Error: 'Age' is INT, '30' is NVARCHAR 
- Implicit Conversion in Expressions:
 
- SQL Server attempts to implicitly convert data types in an expression, leading to errors.
 - Example:
sql SELECT 'Age: ' + 30; -- Error: Cannot concatenate string and integer 
- Inserting or Updating with Mismatched Types:
 
- Inserting or updating an 
INTcolumn with anNVARCHARvalue that cannot be converted. - Example:
sql INSERT INTO Employees (Age) VALUES ('Thirty'); -- Error: 'Thirty' is not an integer 
Solutions
1. Ensure Valid Numeric Values
- Validate that the 
NVARCHARvalue contains only numeric characters before converting it to anINT. - Example:
sql SELECT CAST('123' AS INT); -- Valid conversion 
2. Handle Empty or NULL Values
- Use 
ISNULLorCOALESCEto handleNULLvalues and provide a default. - Example:
sql SELECT CAST(ISNULL(ColumnName, '0') AS INT) FROM TableName; 
3. Explicitly Convert Data Types
- Use 
CASTorCONVERTto explicitly convert data types where necessary. - Example:
sql SELECT * FROM Employees WHERE Age = CAST('30' AS INT); -- Correct 
4. Use TRY_CAST or TRY_CONVERT
- Use 
TRY_CASTorTRY_CONVERTto safely handle conversion errors. These functions returnNULLif the conversion fails. - Example:
sql SELECT TRY_CAST('ABC123' AS INT); -- Returns NULL instead of an error 
5. Validate Input Data
- Ensure that input data is valid before performing operations or inserting into the database.
 - Example in C#:
csharp if (int.TryParse(inputValue, out int result)) { // Valid integer } else { // Handle invalid input } 
6. Fix Mismatched Data Types
- Ensure that columns and variables have compatible data types.
 - Example:
sql ALTER TABLE Employees ALTER COLUMN Age NVARCHAR(10); -- Change column type if necessary 
Debugging Steps
- Identify the Problematic Value:
 
- Locate the 
NVARCHARvalue causing the conversion error. - Example:
sql SELECT ColumnName FROM TableName WHERE TRY_CAST(ColumnName AS INT) IS NULL; 
- Check for Non-Numeric Characters:
 
- Use 
PATINDEXorLIKEto find values with non-numeric characters. - Example:
sql SELECT ColumnName FROM TableName WHERE ColumnName LIKE '%[^0-9]%'; 
- Validate Data Types:
 
- Verify the data types of columns and variables involved in the operation.
 - Example:
sql SELECT COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'TableName'; 
- Test with Sample Data:
 
- Run the query with sample data to reproduce and isolate the issue.
 - Example:
sql SELECT CAST('123' AS INT); -- Valid SELECT CAST('ABC' AS INT); -- Error 
Example Scenarios and Fixes
Scenario 1: Non-Numeric Characters
   SELECT CAST('ABC123' AS INT); -- Error
Fix:
   SELECT TRY_CAST('ABC123' AS INT); -- Returns NULL
Scenario 2: Empty String
   SELECT CAST('' AS INT); -- Error
Fix:
   SELECT CAST(ISNULL('', '0') AS INT); -- Returns 0
Scenario 3: Mismatched Data Types in Comparison
   SELECT * FROM Employees WHERE Age = '30'; -- Error
Fix:
   SELECT * FROM Employees WHERE Age = CAST('30' AS INT); -- Correct
Scenario 4: Implicit Conversion in Expressions
   SELECT 'Age: ' + 30; -- Error
Fix:
   SELECT 'Age: ' + CAST(30 AS NVARCHAR); -- Correct
Scenario 5: Inserting Invalid Data
   INSERT INTO Employees (Age) VALUES ('Thirty'); -- Error
Fix:
   INSERT INTO Employees (Age) VALUES (30); -- Correct
Best Practices
- Use 
TRY_CASTorTRY_CONVERT: 
- These functions prevent errors by returning 
NULLfor invalid conversions. 
- Validate Input Data:
 
- Ensure data is valid before performing operations or inserting into the database.
 
- Explicitly Convert Data Types:
 
- Avoid relying on implicit conversions by explicitly converting data types.
 
- Use Consistent Data Types:
 
- Ensure columns and variables have compatible data types to avoid mismatches.
 
- Handle NULL and Empty Values:
 
- Use 
ISNULL,COALESCE, or default values to handleNULLand empty strings. 
By following these steps and best practices, you can resolve the Cannot convert nvarchar to int error and ensure robust data handling in your SQL queries.
